read

read(2)                         2007-10-27-16:31                         read(2)



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


Огляд
       #include <unistd.h>

       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_NOBLOCK, і жодних даних не було в негайній наявності для
              читання.


       EIO
               Помилка вводу/виводу. Це може статися, наприклад, коли процес
              знаходиться в групі процесів фонового режиму, намагається
              прочитати зі своєго контролюючого tty (терміналу), i або він
              ігнорує чи блокує 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 залишають поновлення atime серверу і клієнтська
       сторона, спокійно читаючи з власного кешу, не вимагатиме поновлення atime
       на сервері за відсутністю читання на серверному боці. UNIX-семантики
       можна добитись через заборону кешування атрибутів на клієнтській стороні,
       але це, в більшості випадків, значно збільшить навантаження серверу і
       погіршить ефективність.

       Багато файлових систем і дисків вважаються настільки швидкими, що
       втілення O_NONBLOCK вважається непотрібним. Тож O_NONBLOCK може бути
       відсутньою для файлів і/або дисків.


Дивіться також
       close(2), fcntl(2), ioctl(2), lseek(2), readdir(2), readlink(2),
       select(2), write(2), fread(3), readv(3)




© 2005-2007 DLOU, GNU FDL       2007-10-27-16:31                         read(2)