Хрестоматия по программированию на Си в Unix


девочки

Системные вызовы и взаимодействие с UNIX. Хрестоматия по программированию на Си в Unix - стр. 4


trial++; }

Исследуя выдачу этой программы, вы можете обнаружить, что READ-области могут перекрываться; но что никогда не перекрываются области READ и WRITE ни в какой комбинации. Если идет чтение процессом A - то запись процессом B дождется разблокировки A (чтение - не будет дожидаться). Если идет запись процессом A - то и чтение процессом B и запись процессом B дождутся разблокировки A.

6.9.2. UNIX SVR4 имеет еще один интерфейс для блокировки файлов: функцию lockf.

#include <unistd.h>

int lockf(int fd, int operation, size_t size);

Операция operation:

F_ULOCK

Разблокировать указанный сегмент файла (это может снимать один или несколько замков). F_LOCK

F_TLOCK

Установить замок. При этом, если уже имеется чужой замок на запрашиваемую область, F_LOCK блокирует процесс, F_TLOCK - просто выдает ошибку (функция возвращает -1, errno устанавливается в EAGAIN).

  • Ожидание отпирания/запирания замка может быть прервано сигналом.
  • Замок устанавливается следующим образом: от текущей позиции указателя чтениязаписи в файле fd (что не похоже на fcntl, где позиция задается явно как параметр в структуре); длиной size. Отрицательное значение size означает отсчет от текущей позиции к началу файла. Нулевое значение - означает "от текущей позиции до конца файла". При этом "конец файла" понимается именно как конец, а не как текущий размер файла. Если файл изменит размер, запертая область все равно будет простираться до конца файла (уже нового).
  • Замки, установленные процессом, автоматически отпираются при завершении процесса.

F_TEST

Проверить наличие замка. Функция возвращает 0, если замка нет; -1 в противном случае (заперто).

Если устанавливается замок, перекрывающийся с уже установленным, то замки объединяются.

было: ___________#######____######__________

запрошено:______________##########______________

стало: ___________#################__________

Если снимается замок с области, покрывающей только часть заблокированной прежде, остаток области остается как отдельный замок.

было: ___________#################__________




Содержание  Назад  Вперед