read

Autres langues

Langue: ru

Autres versions - même langue

Version: July 12, 1997 (fedora - 25/11/07)

Section: 2 (Appels système)

НАЗВАНИЕ

read - читает из файлового дескриптора

КРАТКОЕ ОПИСАНИЕ

 #include <unistd.h>
 
 ssize_t read(int fd, void *buf, size_t count);
 

ОПИСАНИЕ

read() пытается читать из файлового дескриптора fd байты в количестве count в буфер, начинающийся по адресу buf.

Если count равен нулю, то read() возвращает ноль и ничего не делает. Если count больше, чем SSIZE_MAX, то результат неопределен.

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

При успешном завершении возвращается количество байт, которые были прочитаны (ноль означает конец файла), а позиция в файле увеличивается на это значение. Если количество прочитанных байт меньше, чем количество запрошенных, то это не считается ошибкой: например, мы могли читать вблизи конца файла, или же из трубы, или с терминала, или же read() был прерван сигналом. В случае ошибки возвращается -1, а errno устанавливается должным образом. В этом случае позиция файла неопределена.

ОШИБКИ

EINTR
Системный вызов был прерван сигналом до того, как был прочитан хотя бы байт.
EAGAIN
Был запрошен неблокирующий ввод-вывод с помощью O_NONBLOCK, и нет данных, немедленно доступных для чтения.
EIO
Ошибка ввода-вывода. Это может произойти, например, если процесс, находящийся в фоновой группе процессов, пытается читать с контролирующего терминала, и игнорирует или блокирует сигнал SIGTTIN, или же его группа процессов осталась без родителя. Это может также случиться, если произошла низкоуровневая ошибка ввода-вывода при чтения с диска или ленты.
EISDIR
fd ссылается на каталог.
EBADF
fd не является допустимым дескриптором файлов или не открыт для чтения.
EINVAL
fd связан с объектом, неприспособленным для чтения.
EFAULT
buf указывает за пределы доступного адресного пространства.

Могут также возникнуть другие ошибки, в зависимости от объекта, связанного с fd. POSIX позволяет системному вызову read, который был прерван после чтения первого куска запрошенных данных, вернуть -1 (устанавливая errno в EINTR) или количество уже прочитанных байт.

СООТВЕТСТВИЕ СТАНДАРТАМ

SVr4, SVID, AT&T, POSIX, X/OPEN, BSD 4.3

ОГРАНИЧЕНИЯ

На файловых системах NFS чтение небольших порций данных обновляет отметки времени только в первый раз, последующие операции чтения не делают этого. Это вызвано кэшированием атрибутов с клиентской стороны, потому что большинство (если не все) клиентов NFS предоставляют серверу обновлять время доступа, а запросы на чтение, которые удовлетворяются из клиентского кэша, не вызывают обновления времени доступа, потому что данные не читаются с сервера. Семантика UNIX может быть достигнута запретом кэширования атрибутов, но в большинстве случаев это увеличит нагрузку на сервер и уменьшит производительность.

СМОТРИ ТАКЖЕ

readdir(2), write(2), fcntl(2), close(2), lseek(2), select(2), readlink(2), ioctl(2), fread(3).

ПЕРЕВОД

Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999