Шрифт:
Первое значение параметра command —
Значения, используемые в структуре
Таблица 7.2
Значение | Описание |
---|---|
l_type | Или F_RDLCK для разделяемой (только чтение) блокировки, или F_WRLCK для исключительной (на запись) блокировки |
l_whence | Одно из значений: SEEK_SET , SEEK_CUR или SEEK_END LCK |
l_start | Начальный байт интересующего вас участка файла |
l_len | Количество байтов в интересующем вас участке файла |
l_pid | Идентификатор процесса, удерживающего блокировку |
Процесс может применять вызов с командой
Если вызов с командой
Эта команда пытается заблокировать или разблокировать участок файла, заданного
Таблица 7.3
Значение | Описание |
---|---|
l_type | Одно из следующих: • F_RDLCK — для разделяемой или допускающей только чтение блокировки; • F_WRLCK — для исключительной или блокировки записи; • F_UNLCK — для разблокирования участка |
l_pid | Не используется |
Как и в случае
Команда
Все блокировки файла, установленные программой, автоматически очищаются, когда закрывается соответствующий дескриптор файла. То же самое происходит, когда программа завершается.
Применение вызовов read и write при наличии блокировки
Когда вы применяете блокировку участков файла, очень важно использовать для доступа к данным низкоуровневые вызовы
Для того чтобы понять, в чем тут проблема, рассмотрим две программы, которые хотят обновить один и тот же файл. Предположим, что файл содержит 200 байтов данных, все нули. Первая программа начинает работу и устанавливает блокировку на запись для первых 100 байтов файла. Затем она применяет функцию