Документация по LinuxLinuxDoc.Ru 🔍

read - cчитывает данные файлового описателя

НАЗВАНИЕ
read - cчитывает данные файлового описателя

СИНТАКСИС
#include

ssize_t read(int fd, void *buf, size_t count);

ОПИСАНИЕ
read() пытается записать count байтов файлового описателя
fd в буфер, адрес которого начинается с buf.

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


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

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

КОДЫ ОШИБОК
EINTR Системный вызов был прерван сигналом до того, как
был прочитан хотя бы один байт.

EAGAIN При помощи O_NONBLOCK был выбран неблокирующий
(non-blocking) ввод-вывод, и нет данных, доступных
для чтения в данный момент.

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 может быть получена
путем запрета кэширования атрибутов, но в большинстве
случаев это увеличит нагрузку на сервер и уменьшит
производительность.

Много файловых систем и дисков создавались достаточно
быстрыми для того, чтобы в использовании O_NONBLOCK не
было необходимости. Поэтому иногда O_NONBLOCK может быть
недоступно на некоторых файлах и/или дисках.
Читать новости Linux в Telegram
Linux - read - cчитывает данные файлового описателя
Мы в соцсетях ✉