Блокировка файла (fcntl) |
Здравствуйте, гость ( Вход | Регистрация )
Блокировка файла (fcntl) |
oleg_2 |
29.11.2009, 16:25
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: 0 |
Блокировка файла (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); в обработчике, то это выход из положения. Хотелось бы понять почему не работает как задумано. Кто знает прошу ответить. |
|
|
Litkevich Yuriy |
29.11.2009, 17:07
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
См. тему: Справка по кнопкам и тэгам форума
|
|
|
Текстовая версия | Сейчас: 20.4.2024, 7:24 |