Provided by: manpages-pl-dev_20060617-1_all bug

NAZWA

       read - odczyt z deskryptora pliku

SKŁADNIA

       #include <unistd.h>

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

OPIS

       read()  próbuje  odczytać maksymalnie count bajtów z deskryptora plików
       fd do bufora, którego początek znajduje się w buf.

       Jeśli count jest równe zero, read() zwraca zero i nic  więcej  się  nie
       dzieje.    Jeśli   count   jest   większe  niż  SSIZE_MAX,  wynik  jest
       nieokreślony.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu zwracana jest liczba odczytanych bajtów  (zero
       oznacza  koniec  pliku),  oraz  o  tę wartość przesuwana jest pozycja w
       pliku.  Nie jest błędem, jeśli  liczba  ta  jest  mniejsza  niż  liczba
       żądanych  bajtów;  może się to zdarzyć np. ponieważ chwilowo dostępnych
       jest mniej bajtów (może z powodu  bliskości  końca  plików,  a  może  z
       powodu  czytania z potoku lub z terminala), lub ponieważ read() zostało
       przerwane  sygnałem.   Po  błędzie  zwracane  jest  -1  i   odpowiednio
       ustawiane  errno.  W tym wypadku nie jest określone czy pozycja w pliku
       się zmieni.

BŁĘDY

       EINTR  Wywołanie zostało przerwane sygnałem przed odczytaniem danych.

       EAGAIN Przy użyciu O_NONBLOCK wybrano  nieblokujące  we/wy,  a  nie  ma
              akurat danych dostępnych do odczytania natychmiast.

       EIO    Błąd  we/wy. Zdarza się to na przykład, gdy proces jest w grupie
              procesów tła próbuje czytać z kontrolującego tty, i blokuje  lub
              ignoruje   sygnał   SIGTTIN,   lub   jego  grupa  procesów  jest
              osierocona.  Może  się   to   również   zdarzyć,   gdy   wystąpi
              niskopoziomowy błąd we/wy podczas odczytu z dysku lub taśmy.

       EISDIR fd odnosi się do katalogu.

       EBADF  fd nie jest prawidłowym deskryptorem pliku, lub nie jest otwarty
              dla odczytu.

       EINVAL fd wskazuje na obiekt nieodpowiedni do odczytu.

       EINVAL fd jest skojarzony z obiektem, który  nie  jest  odpowiedni  dla
              odczytu.

       EFAULT buf  wskazuje poza dostępną dla użytkownika przestrzeń adresową.

       Mogą się pojawić inne błędy, zależnie od  obiektu  skojarzonego  z  fd.
       POSIX  zezwala by read którego przerwano po odczytaniu fragmentu danych
       zwrócił  -1  (z  errno  ustawionym  na  EINTR)  lub  by  zwróćił  ilość
       odczytanych bajtów.

ZGODNE Z

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

OGRANICZENIA

       Na systemach plików NFS, odczytanie niewielkiej ilości danych spowoduje
       uaktualnienie  znacznika  czasu  tylko  za  pierwszym  razem.  Następne
       wywołania  tego  nie uczynią. Jest to związana z buforowaniem atrybutów
       po stronie klienta, gdyż większość (jeżeli nie wszystkie)  klienty  NFS
       pozostawiają  uaktualnianie  atime  serwerowi,  a  odczyty  po  stronie
       klienta, odbywające się z buforów klienta nie spowodują   uaktualnienia
       atime  na  serwerze,  gdyż  nie ma wówczas odczytów po stronie serwera.
       Semantykę UNIX-a można uzyskać poprzez wyłączenie buforowania atrybutów
       po  stronie  klienta.  Jednakże,  w  większości przypadków spowoduje to
       istotny wzrost obciążenia serwera i zmniejszy wydajność.

       Wiele systemów plików i dysków jest uważane  za  dostatecznie  szybkie,
       aby   implementacja  O_NONBLOCK  była  uważana  za  zbędną.  Tak  więc,
       O_NONBLOCK może nie być dostępne dla plików i/lub dysków.

ZOBACZ TAKŻE

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