Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 29.11.2009, 17:07 |
См. тему: Справка по кнопкам и тэгам форума | |
oleg_2 | Дата 29.11.2009, 16:25 |
Блокировка файла (fcntl) Язык СИ ОС UNIX - Free-bsd Нужно прервать процесс, ожидающий блокировку файла. Процесс, ожидающий блокировку файла, получает сигнал и почти не реагирует на этот сигнал. Не могу понять почему. Вот тестовая программа:
(Функция printf() запрещена в обработчиках сигналов, но поскольку программа простая тестовая и от безысходности) (состояние процессов удобно смотреть в другом окне утилитой top) Эта программа не работает так, как я ожидал. Ожидалось: 0 сек. -запуск программы, процесс (pid>0) блокирует файл; 5 сек. -процесс (pid==0) запрашивает блокировку файла и ждет её; 15 сек. -процесс (pid==0) получает сигнал, ожидание блокировки прерывается. Вызов k=fcntl(fd,F_SETLKW,&lock); возвращает -1; На самом деле работает так: 0 сек. -запуск программы, процесс (pid>0) блокирует файл; 5 сек. -процесс (pid==0) запрашивает блокировку файла и ждет её; 15 сек. -процесс (pid==0) прерывается сигналом (обработчик пишет слово signal), и снова, как ни в чем не бывало дожидает блокировку. Дождавшись получает её. fd -объявлен глобальным потому, что если раскомментировать строку //close(fd); в обработчике, то это выход из положения. Хотелось бы понять почему не работает как задумано. Кто знает прошу ответить. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 10:15 |