[<<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- захватить запись (с блокировкой)