crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Проблемы с POSIX функцией int close(int fd), Происходит прерывание по сигналу
AD
  опции профиля:
сообщение 10.4.2012, 10:01
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Собственно объяснил все в заголовке.
При вызове функции закрытия файла (в моем случае -файл). Дальше строчки close(handle_) не идет. Пропускает оставшуюся часть функции. Как это вылечить? Как поймать нужный мне сигнал POSIX?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 10.4.2012, 11:32
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


можно узнать систему и компилятор ? Надеюсь такую фигню, как handle_ число вы проверяли.



Сообщение отредактировал maint - 10.4.2012, 11:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.4.2012, 11:34
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(maint @ 10.4.2012, 12:32) *
можно узнать систему и компилятор ? Надеюсь такую фигню, как handle_ число вы проверяли.

Конечно проверял. Система Ubuntu. Компилятор - g++.
Да уже выяснил. Надо было перехватить сигнал SIGKILL.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 10.4.2012, 12:02
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


хотелось бы узнать систему и компилятор. Такую фигню как номер handle_ проверяли. Может быть. Сам такой. И еще, код возврата от close есть или нет ?

Цитата(AD @ 10.4.2012, 17:34) *
Цитата(maint @ 10.4.2012, 12:32) *
можно узнать систему и компилятор ? Надеюсь такую фигню, как handle_ число вы проверяли.

Конечно проверял. Система Ubuntu. Компилятор - g++.
Да уже выяснил. Надо было перехватить сигнал SIGKILL.

ну как обычно. signal(SIGKILL, функция_или_ стандарт); Да сигналы, после срабатывания надо заноао инициализировать. Разовое. так думал Керниган

Сообщение отредактировал maint - 10.4.2012, 12:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.4.2012, 13:42
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Ан-нет, не удалось. Вопрос еще открыт!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.4.2012, 19:31
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


не может close вызывать какого-либо сбоя. что-то ты не так делаешь. или левый дескриптор закрываешь, или другой поток туда пишет в это время. что-то типа того.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 11.4.2012, 5:31
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(AD @ 10.4.2012, 19:42) *
Ан-нет, не удалось. Вопрос еще открыт!

ну как обычно, убирайте все, кроме ckose. Точно SIGKILL ? Сигнал настораживает. Его из пользовательское программы постатраться надо.В линухе им процессы убивают, когда безнадега. С коммандной kill -9
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.4.2012, 8:15
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Iron Bug @ 10.4.2012, 20:31) *
не может close вызывать какого-либо сбоя. что-то ты не так делаешь. или левый дескриптор закрываешь, или другой поток туда пишет в это время. что-то типа того.

Ну вообще да... Запись идет. Видимо, вначале надо прервать запись. Спасибо. Посмотрю, как поправить.


Сообщение отредактировал AD - 11.4.2012, 8:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 11.4.2012, 9:22
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(AD @ 11.4.2012, 14:15) *
Цитата(Iron Bug @ 10.4.2012, 20:31) *
не может close вызывать какого-либо сбоя. что-то ты не так делаешь. или левый дескриптор закрываешь, или другой поток туда пишет в это время. что-то типа того.

Ну вообще да... Запись идет. Видимо, вначале надо прервать запись. Спасибо. Посмотрю, как поправить.

занатяый вариант. если не сложно расскажите в чём хохма, когда спраитесь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 11.4.2012, 9:47
Сообщение #10


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(maint @ 11.4.2012, 12:22) *
занатяый вариант

да скорее всего там ничего интересного нет. один поток пишет, второй в это время закрыл дескриптор. после чего первый поток тупо пытается писать по уже закрытому дескриптору и получает ексепшн.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 12:57