Linux программирование в примерах - Роббинс Арнольд
Тут можно читать бесплатно Linux программирование в примерах - Роббинс Арнольд. Жанр: Интернет издательство , год .
Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте knigi-for.me (knigi for me) или прочесть краткое содержание, предисловие (аннотацию),
описание и ознакомиться с отзывами (комментариями) о произведении.
Значение
F_UNLCKl_typestruct employee { /* что угодно */ }; /* Описание сотрудника */struct flock lock; /* Структура блока */.../* Заблокировать сотрудников 6-8 */lock.l_whence = SEEK_SET; /* Абсолютное положение */lock.l_start = 5 * sizeof(struct employee); /* Начало 6-й структуры */lock.l_len = sizeof(struct employee) * 3; /* Заблокировать 3 записи *//* ...установка блокировки (см. следующий раздел)... *//* Освобождение записи 7: предыдущий блок расщепляется на два: */lock.l_whence = SEEK_SET; /* Абсолютное положение */lock.l_start = 6 * sizeof(struct employee); /* Начало 7-й структуры */lock.l_len = sizeof(struct employee) * 1; /* Разблокирование 1-й записи *//* ...снятие блокировки (см. следующий раздел)... */14.2.2.2. Установка и снятие блокировок
После заполнения структуры
struct flockcmdfcntl()F_GETLK F_SETLK F_SETLKW Команда
F_GETLKstruct flockl_typeF_UNLCKЕсли блокировка недоступна, операционная система заполняет различные поля сведениями, описывающими уже установленные блокировки, которые препятствуют установке новой. В этом случае
l_pidКоманда
F_SETLKfcntl()EAGAINEACCESSКоманда
F_SETLKWF_SETLKВыбрав соответствующее значение для аргумента
cmdfcntl()struct flockstruct flock lock; int fd; /* ...открыть файл, заполнить struct flock... */ if (fcntl(fd, F_SETLK, &lock) < 0) { /* Установить не удалось, попытаться восстановиться */}Функция
lockf()#include <sys/file.h> /* XSI */int lockf(int fd, int cmd, off_t len);Дескриптор файла
fdlenpospos + lenlenpos - lenpos - 1F_LOCK F_TLOCK F_LOCKF_TLOCKF_ULOCK F_TEST errnoEACCESSВозвращаемое значение равно 0 в случае успеха и -1 при ошибке, с соответствующим значением в
errnoEAGAINF_TLOCKF_TESTEDEADLKF_TLOCKENOLCKПолезна комбинация
F_TLOCKEDEADLKF_LOCKF_TLOCKЗавершив работу с заблокированным участком, его следует освободить. Для
fcntl()struct lockl_typeF_UNLCKF_SETLKcmd