Спасибо, как раз к fcntl приглядывался, правда никак рабочего примера не найду...
А не подскажите, на сколько операции атомарные?
нужна конструкция вида:
if (блокировка_установленна)
{
if (блокировка_создана больше чем 30 сек назад)
{
снять блокировку;
начать сначала;
}
else
{
ждать снятия блокировки, затем сделать что-то;
}
}
else
{
установит_блокировку;
сделать дело;
снять_блокировку;
}
Есть вероятность что между проверкой блокировки и установкой блокировки кто-то влезет и поставит свою блокировку...
Можно ли при помощи fcntl как-то это контролировать?
>Для блокировки файлов используется fcntl (System V and POSIX)
>#include <fcntl.h>
>
>int fcntl ( int fdesc, int cmd_flag, struct flock*);
>
>fdesc- дескриптор файла
>cmd_flag - F_SETLK блокирует файл
>
> F_SETLKW блокирует файл и вызывающий процес
>
> F_GETLK делает запрос о процессе, который блокировал
>
>struct flock
>{
> short l_type; какую блокировку снять или установить
> short l_whence; базовый адрес следующего поля
> off_t l_start; смещение относительно базового адреса
> off_t l_len; сколько байтов в заблокированной области
> pid_t l_pid; PID процесса
>}
>
>смотри ман.
>Eсли хочеш могу на мыло послать в jepg пару страниц из книги
>где это на руском описанно.