NAZWA
read - odczyt z deskryptora pliku
SKŁADNIA
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
OPIS
Uwaga! To tłumaczenie może być nieaktualne!
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)
INFORMACJE O TŁUMACZENIU
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:
man --locale=C 2 read
Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages-pl/.