![]() |
|
Модераторы: xvr |
![]()
|
|
| assasinnn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
В приведенном ниже фрагменте кода я при запуске первого экземпляра программы блокирую файл на запись. При запуске второй копии программа должна выдать сообщение, что одна копия уже работает. Однако подобного сообщения она не выдает и в структуре типа flock флаг необходимый явно не присутствует. Вот код:
В чем проблема? Заранее спасибо. |
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 1 Всего: 0 |
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| assasinnn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
спасибо, уже читал. Функции необходимы те, что уже есть в коде... |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
Вызов fcntl с F_GETLK возвращает параметры не любой блокировки на этом файле, а той, которая препятствует установлению блокировки, описанной в аргументах. Здесь в аргументах, очевидно, мусор и вызов fcntl просто возвращает ошибку.
Кроме того, между проверкой блокировки и её установлением имеет место race condition. Блокировку надо устанавливать сразу и при неудаче сообщать о том, что файл занят. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| assasinnn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
понятно. Void, а как посоветуете примерно сделать? Необходимо, чтобы программа работала либо в режиме добавления записей, либо чтения по желанию пользователя. Если программа в режиме записи, то копии программы уже не могут не писать, не читать. Если в чтении, то не могут только писать.
|
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
внимательно читать man 2 fcntl
про различия между advisory и mandatory локами и реализацией последнего в linux Добавлено через 7 минут и 25 секунд assasinnn, юзай обычный pid-файл в /var/run все демоны работают именно так при запуске делаем
при завершении (перехватываем все возможные сигналы с kill-семантикой)
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |