| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > lock file |
| Автор: assasinnn 3.10.2009, 22:51 | ||
В приведенном ниже фрагменте кода я при запуске первого экземпляра программы блокирую файл на запись. При запуске второй копии программа должна выдать сообщение, что одна копия уже работает. Однако подобного сообщения она не выдает и в структуре типа flock флаг необходимый явно не присутствует. Вот код:
В чем проблема? Заранее спасибо. |
| Автор: niXman 3.10.2009, 23:14 |
| http://forum.vingrad.ru/index.php?showtopic=269622&view=findpost&p=1942830 |
| Автор: assasinnn 3.10.2009, 23:17 | ||
спасибо, уже читал. Функции необходимы те, что уже есть в коде... |
| Автор: Void 3.10.2009, 23:21 |
| Вызов fcntl с F_GETLK возвращает параметры не любой блокировки на этом файле, а той, которая препятствует установлению блокировки, описанной в аргументах. Здесь в аргументах, очевидно, мусор и вызов fcntl просто возвращает ошибку. Кроме того, между проверкой блокировки и её установлением имеет место race condition. Блокировку надо устанавливать сразу и при неудаче сообщать о том, что файл занят. |
| Автор: assasinnn 3.10.2009, 23:33 |
| понятно. Void, а как посоветуете примерно сделать? Необходимо, чтобы программа работала либо в режиме добавления записей, либо чтения по желанию пользователя. Если программа в режиме записи, то копии программы уже не могут не писать, не читать. Если в чтении, то не могут только писать. |
| Автор: MAKCim 4.10.2009, 09:27 | ||||
| внимательно читать man 2 fcntl про различия между advisory и mandatory локами и реализацией последнего в linux Добавлено через 7 минут и 25 секунд assasinnn, юзай обычный pid-файл в /var/run все демоны работают именно так при запуске делаем
при завершении (перехватываем все возможные сигналы с kill-семантикой)
|