Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Значение
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
