Unix Man (Справочное руководство)


WRITE(2)


WRITE(2)

НАЗВАНИЕ


write - запись в файл

СИНТАКСИС

int write (fildes, buf, nbyte) int fildes; char *buf; unsigned nbyte;

ОПИСАНИЕ


Аргумент fildes - это дескриптор файла, полученный после выполнения системных вызовов , , , или .

Системный вызов write пытается записать nbyte байт из буфера, на который указывает аргумент buf, в файл, ассоциированный с дескриптором fildes.

Для устройств, допускающих позиционирование, системный вызов write выполняет запись в файл, начиная с указателя текущей позиции, ассоциированного с дескриптором fildes. После завершения записи указатель текущей позиции файла увеличивается на количество записанных байт.

Для устройств без возможности позиционирования запись всегда выполняется с текущей позиции. Значение указателя текущей позиции файла для такого устройства неопределено.

Если установлен флаг статуса файла O_APPEND, то перед каждой записью указатель текущей позиции позиционируется на конец файла.

Для обычных файлов, если установлен флаг статуса файла O_SYNC, системный вызов write ожидает физического обновления как данных файла, так и его статуса. Эта опция предназначена для специальных приложений, в которых требуется дополнительная надежность даже за счет потери производительности. Для блочных специальных файлов, если установлен флаг O_SYNC, выполнение вызова write не завершится до тех пор, пока данные не будут физически обновлены.

Запись в обычный файл блокируется, если установлен флаг учета блокировки [см. ] и тот сегмент файла, в который производится попытка записи, заблокирован другим процессом. В этом случае, если не установлен флаг O_NDELAY, записывающий процесс откладывается до снятия блокировки сегмента.

Для псевдоустройств [см. ] на выполнение операции write влияют минимальное и максимальное возможные значения аргумента nbyte ("размер пакета"), допустимые для данного потока. Эти значения содержатся в модуле потока, ближайшем к истоку. Если модуль не помещен в поток пользователем [см. опцию I_PUSH в ], то эти значения не могут быть установлены или опрошены на пользовательском уровне. Если значение аргумента nbyte лежит в интервале изменений размера пакета, то записывается nbyte байт, если же значение аргумента nbyte не лежит в этом интервале и минимальный размер пакета равен 0, то вызов write перед посылкой данных в поток разбивает буфер на сегменты максимально допустимой длины пакета (размер последнего сегмента может быть меньше максимального). Если значение аргумента nbyte не лежит в интервале изменений размера пакета и минимальный размер не равен 0, то write завершается неудачей с кодом ошибки ERANGE. Запись буфера нулевой длины (значение аргумента nbyte равно 0) приводит к посылке нулевого количества байт и возврату нулевого значения.




Начало  Назад  Вперед



Книжный магазин