Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       read - citește dintr-un descriptor de fișier

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <unistd.h>

       ssize_t read(int fd, void buf[.count], size_t count);

DESCRIERE

       read()  încearcă  să  citească  până la count octeți din descriptorul de fișier fd în memoria tampon care
       începe la buf.

       În cazul fișierelor care acceptă căutarea, operația de  citire  începe  de  la  poziția  fișierului,  iar
       poziția  fișierului este incrementată cu numărul de octeți citiți. În cazul în care poziția fișierului se
       află la sau după sfârșitul fișierului, nu se citește niciun octet, iar read() returnează zero.

       Dacă count este zero, read() poate detecta erorile descrise mai jos.  În absența oricăror erori sau  dacă
       read()  nu  verifică  dacă  există  erori,  o  citire read() cu count de 0 returnează zero și nu are alte
       efecte.

       În conformitate cu POSIX.1, dacă count  este  mai  mare  decât  SSIZE_MAX,  rezultatul  este  definit  de
       implementare; a se vedea NOTE pentru limita superioară în Linux.

VALOAREA RETURNATĂ

       În  caz de succes, se returnează numărul de octeți citiți (zero indică sfârșitul fișierului), iar poziția
       fișierului este avansată cu acest număr. Nu este o eroare dacă acest număr este mai mic decât numărul  de
       octeți  cerut; acest lucru se poate întâmpla, de exemplu, pentru că sunt disponibili mai puțini octeți în
       acest moment (poate pentru că am fost aproape de sfârșitul fișierului, pentru că citim  dintr-o  conductă
       sau  de  la  un  terminal)  sau  pentru că read() a fost întrerupt de un semnal. A se vedea, de asemenea,
       secțiunea NOTE.

       În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea. În acest caz,  nu
       se specifică dacă poziția fișierului (dacă există) se modifică.

ERORI-IEȘIRE

       EAGAIN Descriptorul  de  fișier  fd  se  referă  la  un fișier, altul decât un soclu, și a fost marcat ca
              neblocat (O_NONBLOCK), iar citirea ar trebui să fie blocată. A se vedea open(2) pentru  mai  multe
              detalii privind marcajul O_NONBLOCK.

       EAGAIN sau EWOULDBLOCK
              Descriptorul  de  fișier fd se referă la un soclu și a fost marcat ca fiind neblocat (O_NONBLOCK),
              iar citirea ar trebui să fie blocată. POSIX.1-2001 permite returnarea oricărei erori în acest  caz
              și  nu  impune  ca aceste constante să aibă aceeași valoare, astfel încât o aplicație portabilă ar
              trebui să verifice ambele posibilități.

       EBADF  fd nu este un descriptor de fișier valid sau nu este deschis pentru citire.

       EFAULT buf se află în afara spațiului dvs. de adrese accesibil.

       EINTR  Apelul a fost întrerupt de un semnal înainte ca datele să fie citite; a se vedea signal(7).

       EINVAL fd este atașat la un obiect care nu este adecvat pentru citire; sau fișierul  a  fost  deschis  cu
              fanionul  O_DIRECT  și  fie  adresa  specificată  în  buf,  fie valoarea specificată în count, fie
              decalajul fișierului nu este aliniat corespunzător.

       EINVAL fd a fost creat printr-un apel la timerfd_create(2) și o dimensiune greșită a  memoriei  tampon  a
              fost furnizată lui read(); a se vedea timerfd_create(2) pentru informații suplimentare.

       EIO    Eroare  de  In/Ieș.  Acest  lucru se va întâmpla, de exemplu, atunci când procesul se află într-un
              grup de procese în fundal, încearcă să citească de la terminalul său de control și fie ignoră  sau
              blochează  SIGTTIN,  fie  grupul său de procese este orfan. Poate apărea, de asemenea, atunci când
              există o eroare de intrare/ieșire de nivel scăzut în timpul citirii de pe un  disc  sau  de  pe  o
              bandă.  O  altă cauză posibilă a apariției EIO pe sistemele de fișiere în rețea este atunci când a
              fost luat un blocaj consultativ pe descriptorul de fișier și  această  blocare  a  fost  pierdută.
              Consultați secțiunea Locuri pierdute din fcntl(2) pentru mai multe detalii.

       EISDIR fd se referă la un director.

       Pot apărea și alte erori, în funcție de obiectul conectat la fd.

STANDARDE

       POSIX.1-2008.

ISTORIC

       SVr4, 4.3BSD, POSIX.1-2001.

NOTE

       În  Linux,  read()  (și  apelurile  de  sistem similare) va transfera cel mult 0x7ffff000 (2.147.479.552)
       octeți, returnând numărul de octeți transferați efectiv; (acest lucru este valabil atât pe  sistemele  pe
       32 de biți, cât și pe cele pe 64 de biți).

       În  cazul  sistemelor  de  fișiere  NFS, citirea unor cantități mici de date va actualiza marca temporală
       numai prima dată, iar apelurile ulterioare pot să nu facă acest lucru. Acest lucru este cauzat de memoria
       cache a atributelor din partea clientului, deoarece majoritatea, dacă nu chiar  toți  clienții  NFS  lasă
       actualizările  st_atime  (ultima  oră  de  acces la fișier) la server, iar citirile din partea clientului
       satisfăcute din memoria cache a clientului nu vor cauza  actualizări  st_atime  pe  server,  deoarece  nu
       există citiri pe partea serverului. Semantica UNIX poate fi obținută prin dezactivarea memorării în cache
       a  atributelor  pe  partea  clientului,  dar în majoritatea situațiilor acest lucru va crește substanțial
       sarcina serverului și va scădea performanța.

ERORI

       În conformitate cu POSIX.1-2008/SUSv4 secțiunea XSI 2.9.7  („Interacțiuni  ale  firelor  de  execuție  cu
       operațiile fișierelor obișnuite”):

           Toate  funcțiile  următoare  trebuie  să  fie atomice una față de cealaltă în efectele specificate în
           POSIX.1-2008 atunci când operează cu fișiere obișnuite sau legături simbolice: ...

       Printre API-urile enumerate ulterior se numără read() și readv(2). Iar printre efectele care ar trebui să
       fie atomice între fire de execuție (și procese) se numără actualizările  poziției  fișierului.  Cu  toate
       acestea,  înainte de Linux 3.14, acest lucru nu era valabil: dacă două procese care împart o descriere de
       fișier deschis (a se vedea open(2)) efectuau un read() (sau readv(2)) în același timp, atunci  operațiile
       de In/Ieș nu erau atomice în ceea ce privește actualizarea poziției fișierului, cu rezultatul că citirile
       din  cele  două  procese  se puteau suprapune (în mod incorect) în blocurile de date pe care le obțineau.
       Această problemă a fost rezolvată în Linux 3.14.

CONSULTAȚI ȘI

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

TRADUCERE

       Traducerea    în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel   Chelu
       <remusgabriel.chelu@disroot.org>

       Această traducere este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3  sau  o
       versiune   ulterioară   cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se  asumă  NICIO
       RESPONSABILITATE.

       Dacă găsiți erori în traducerea acestui manual, vă rugăm să  trimiteți  un  e-mail  la  translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                            read(2)