read

Autres langues

Langue: pl

Autres versions - même langue

Version: 1997-07-12 (openSuse - 09/10/07)

Section: 2 (Appels système)

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)