.\" -*- coding: UTF-8 -*- .\" Copyright 2009-2015, Michael Kerrisk .\" Copyright 1992, Drew Eckhardt .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH read 2 "8 февраля 2026 г." "Linux man\-pages 6.18" .SH НАИМЕНОВАНИЕ read \- читает из файлового дескриптора .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBssize_t read(\fPsize_t count; \fB int \fP\fIfd\fP\fB, void \fP\fIbuf\fP\fB[\fP\fIcount\fP\fB], size_t \fP\fIcount\fP\fB);\fP .fi .SH ОПИСАНИЕ Вызов \fBread\fP() пытается прочитать \fIcount\fP байт из файлового дескриптора \fIfd\fP в буфер, начинающийся по адресу \fIbuf\fP. .P Для файлов, поддерживающих смещения, операция чтения начинается с файлового смещения, и файловое смещение увеличивается на количество прочитанных байт. Если файловое смещение находится за концом файла, то ничего не читается и \fBread\fP() возвращает ноль. .P Если значение \fIcount\fP равно 0, то \fBread\fP() \fIможет\fP обнаружить ошибки, описанные далее. При отсутствии ошибок, или если \fBread\fP() не выполняет проверки, то \fBread\fP() с \fIcount\fP равным 0 возвращает 0 и ничего не меняет. .P В соответствие с POSIX.1, если \fIcount\fP больше \fBSSIZE_MAX\fP, то результат зависит от реализации; смотрите ЗАМЕЧАНИЯ по верхнему пределу в Linux. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении возвращается количество прочитанных байт (ноль означает конец файла), а позиция в файле увеличивается на это значение. Если количество прочитанных байт меньше, чем количество запрошенных, то это не считается ошибкой: например, это могло произойти из\-за того, что прямо сейчас доступно меньшее количество байт (может быть из\-за того, что позиция ближе к концу файла, или потому что выполняется чтение из канала или терминала), или потому что работа \fBread\fP() была прервана сигналом. См. также ЗАМЕЧАНИЯ. .P On error, \-1 is returned, and \fIerrno\fP is set to indicate the error. In this case, it is left unspecified whether the file position (if any) changes. .SH ОШИБКИ .TP \fBEAGAIN\fP Файловый дескриптор \fIfd\fP указывает на файл, не являющийся сокетом и помеченный как неблокирующий ввод/вывод (\fBO_NONBLOCK\fP), а чтение вызовет блокировку. См. \fBopen\fP(2) для дальнейшей информации по флагу \fBO_NONBLOCK\fP. .TP \fBEAGAIN\fP или \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux Файловый дескриптор \fIfd\fP указывает на сокет и он помечен как неблокирующий (\fBO_NONBLOCK\fP), а чтение вызвало бы блокировку. POSIX.1\-2001 позволяет вернуть любую ошибку в этом случае и не требует, чтобы эти константы имели одинаковое значение, поэтому переносимое приложение должно проверять обе эти возможности. .TP \fBEBADF\fP \fIfd\fP не является допустимым файловым дескриптором или не открыт на чтение. .TP \fBEFAULT\fP \fIbuf\fP находится за пределами доступного вам адресного пространства. .TP \fBEINTR\fP Вызов был прерван сигналом до того как были прочитаны данные; см. \fBsignal\fP(7). .TP \fBEINVAL\fP \fIfd\fP присоединён к объекту, который не подходит для чтения; или файл был открыт с указанием флага \fBO_DIRECT\fP, или неправильно выравнены адрес в \fIbuf\fP, значение \fIcount\fP или файловое смещение. .TP \fBEINVAL\fP \fIfd\fP был создан вызовом \fBtimerfd_create\fP(2), а в \fBread\fP() был передан неверный размер буфера; подробней см. в \fBtimerfd_create\fP(2). .TP \fBEIO\fP Ошибка ввода/вывода. Например, это происходит когда процесс, находящийся в фоновой группе процессов, пытается выполнить чтение из своего управляющего терминала, и игнорирует или блокирует сигнал \fBSIGTTIN\fP, или же его группа процессов осталась без родителя. Это также может случиться, если произошла низкоуровневая ошибка ввода\-вывода при чтении с диска или ленты. Также \fBEIO\fP может возникать у сетевых файловых систем, когда консультативная блокировка была убрана у дескриптора файла и потеряна. Подробности смотрите в абзаце \fIПотерянные блокировки\fP в \fBfcntl\fP(2). .TP \fBEISDIR\fP \fIfd\fP указывает на каталог. .P В зависимости от объекта, на который указывает \fIfd\fP, могут происходить и другие ошибки. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ SVr4, 4.3BSD, POSIX.1\-2001. .SH ПРИМЕЧАНИЯ .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 В Linux \fBread\fP() (и похожие системные вызовы) передаст не больше 0x7ffff000 (2 147 479 552) байт, возвращая число байт, переданных на самом деле (это утверждение справедливо как к 32\-битным, так и к 64\-битным системам). .P На файловых системах NFS чтение небольших порций данных обновляет отметки времени только в первый раз, последующие вызовы не делают этого. Это вызвано кэшированием атрибутов с клиентской стороны, потому что большинство (если не все) клиентов NFS предоставляют серверу обновлять \fIst_atime\fP (время последнего доступа), а запросы на чтение, которые удовлетворяются из клиентского кэша, не вызывают обновления \fIst_atime\fP, потому что данные не читаются с сервера. Семантика UNIX может быть достигнута запретом кэширования атрибутов на стороне клиента, но в большинстве случаев это увеличит нагрузку на сервер и снизит производительность. .SH ОШИБКИ В соответствие с POSIX.1\-2008/SUSv4 раздел XSI 2.9.7 ("Thread Interactions with Regular File Operations"): .P .RS 4 Следующие функции должны выполняться атомарно по отношению друг к другу, чтобы работать с обычными файлами или символическими ссылками так, как указано в POSIX.1\-2008: … .RE .P .\" http://thread.gmane.org/gmane.linux.kernel/1649458 .\" From: Michael Kerrisk (man-pages gmail.com> .\" Subject: Update of file offset on write() etc. is non-atomic with I/O .\" Date: 2014-02-17 15:41:37 GMT .\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems .\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4 .\" Author: Linus Torvalds .\" Date: Mon Mar 3 09:36:58 2014 -0800 .\" .\" vfs: atomic f_pos accesses as per POSIX Among the APIs subsequently listed are \fBread\fP() and \fBreadv\fP(2). And among the effects that should be atomic across threads (and processes) are updates of the file offset. However, before Linux 3.14, this was not the case: if two processes that share an open file description (see \fBopen\fP(2)) perform a \fBread\fP() (or \fBreadv\fP(2)) at the same time, then the I/O operations were not atomic with respect to updating the file offset, with the result that the reads in the two processes might (incorrectly) overlap in the blocks of data that they obtained. This problem was fixed in Linux 3.14. .SH "СМОТРИТЕ ТАКЖЕ" \fBclose\fP(2), \fBfcntl\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2), \fBpread\fP(2), \fBreaddir\fP(2), \fBreadlink\fP(2), \fBreadv\fP(2), \fBselect\fP(2), \fBwrite\fP(2), \fBfread\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) aereiae , Azamat Hackimov , Dmitriy S. Seregin , Katrin Kutepova , Lockal , Yuri Kozlov , Баринов Владимир и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT debian-l10n-russian@lists.debian.org списка рассылки русских переводчиков .ME .