[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Управление файлом

Системный вызов fcntl(2) предназначен для управления открытыми
файлами. Он позволяет копировать файловый дескриптор,
получить/установить флаг закрытия-по-exec, получить/установить флаги
состояния файла, освободить место для файла, получить/установить
захват записей. Аргументы для fcntl(2):
fildes    файловый дескриптор, получаемый обычно вызовом open(2).

cmd       одна из команд, определенная символьными константами в файле
          <fcntl.h>. Они будут обсуждены вкратце.

arg       fcntl(2)  может   иметь  третий  аргумент,  тип  и  значение
          которого зависит  от команды  cmd. Тип  может быть  int  или
          адрес структуры struct flock.
                          УПРАВЛЕНИЕ ФАЙЛОМ
fcntl(2)

ИМЯ

      fcntl - управление файлом

ИСПОЛЬЗОВАНИЕ

      #include <sys/types.h>
      #include <fcntl.h>
      #include <unistd.h>

      int fcntl(int fildes,
          int cmd, ... /* arg */ );

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

      успех - зависит от команды cmd

      неуспех - -1 и errno установлена
                           Команды fcntl(2)

Ниже приведены различные значения cmd:
.    Команды, для которых не нужен arg:
     F_GETFD   возвращает состояние  флага закрытия-по-exec  для файла
               fildes. Если  младший бит  возвращаемого значения равен
               0, то  файл  остается  открытым  при  системном  вызове
               exec(2).

     F_GETFL   возвращает флаги состояния файла. Это позволяет узнать,
               как файл  был открыт. Пример этой команды приведен ниже
               в этом разделе.

.    Команды для целого аргумента arg:
     F_DUPFD   копирует  файловый   дескриптор.  Возвращает   файловый
               дескриптор, значение  которого больше  или  равно  arg.
               Похож на системный вызов dup(2).

               Пример: newfd = fcntl(openfd, F_DUPFD, getfd)

     F_SETFD   устанавливает флаг  закрытия-по-exec для файла fildes в
               соответствии с младшим битом в arg (0 или 1).

     F_SETFL   устанавливает флаги  состояния файла  в соответствии со
               значением arg.  Можно установить только флаги O_NDELAY,
               O_NONBLOCK, O_APPEND  и  O_SYNC.  Пример  этой  команды
               приведен ниже в данном разделе.

.    Команды, использующие struct flock * arg:
     F_FREESP  освобождает место,  занимаемое обычным  файлом.  Пример
               этой команды приведен ниже в данном разделе.

     F_GETLK   обсуждается в  разделе, посвященном  захвату записей  и
               файлов.

     F_SETLK   обсуждается в  разделе, посвященном  захвату записей  и
               файлов.

     F_SETLKW  обсуждается в  разделе, посвященном  захвату записей  и
               файлов.

Новыми для SVR4 являются команды F_RSETLK, F_RSETLKW и F_RGETLK,
используемые демоном захвата сети lockd(3N) для коммуникации с ядром
сервера NFS, чтобы обрабатывать захват сетевых разделяемых файлов.
Ссылка: см. fcntl(5).
Новое в SVR4: F_FREESP, F_RSETLK, F_RSETLKW, F_RGETLK.
                           КОМАНДЫ FCNTL(2)

.   без arg

      F_GETFD -      получить состояние флага закрытия-по-exec

      F_GETFL -      получить флаги состояния файла

.   int arg

      F_DUPFD -      скопировать файловый дескриптор

      F_SETFD -      установить флаг закрытия-по-exec

      F_SETFL -      установить флаги состояния файла

.   struct flock *arg

      F_FREESP-      освободить физический носитель

      F_GETLK -      получить информацию о захватах записи

      F_SETLK -      захватить запись

      F_SETLKW-      захватить запись (с блокировкой)