.\" -*- coding: UTF-8 -*- .\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" and Copyright (C) 1993 Michael Haardt, Ian Jackson. .\" and Copyright (C) 2009-2015 Michael Kerrisk, .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified Sat Jul 24 00:06:00 1993 by Rik Faith .\" Modified Wed Jan 17 16:02:32 1996 by Michael Haardt .\" .\" Modified Thu Apr 11 19:26:35 1996 by Andries Brouwer .\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer .\" Modified Fri Jan 31 16:47:33 1997 by Eric S. Raymond .\" Modified Sat Jul 12 20:45:39 1997 by Michael Haardt .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH read 2 "3 aprilie 2023" "Pagini de manual de Linux 6.05.01" .SH NUME read \- citește dintr\-un descriptor de fișier .SH BIBLIOTECA Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP) .SH REZUMAT .nf \fB#include \fP .PP \fBssize_t read(int \fP\fIfd\fP\fB, void \fP\fIbuf\fP\fB[.\fP\fIcount\fP\fB], size_t \fP\fIcount\fP\fB);\fP .fi .SH DESCRIERE \fBread\fP() încearcă să citească până la \fIcount\fP octeți din descriptorul de fișier \fIfd\fP în memoria tampon care începe la \fIbuf\fP. .PP Î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 \fBread\fP() returnează zero. .PP Dacă \fIcount\fP este zero, \fBread\fP() \fIpoate\fP detecta erorile descrise mai jos. În absența oricăror erori sau dacă \fBread\fP() nu verifică dacă există erori, o citire \fBread\fP() cu \fIcount\fP de 0 returnează zero și nu are alte efecte. .PP În conformitate cu POSIX.1, dacă \fIcount\fP este mai mare decât \fBSSIZE_MAX\fP, rezultatul este definit de implementare; a se vedea NOTE pentru limita superioară în Linux. .SH "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ă \fBread\fP() a fost întrerupt de un semnal. A se vedea, de asemenea, secțiunea NOTE. .PP În caz de eroare, se returnează \-1, iar \fIerrno\fP este configurată pentru a indica eroarea. În acest caz, nu se specifică dacă poziția fișierului (dacă există) se modifică. .SH ERORI\-IEȘIRE .TP \fBEAGAIN\fP Descriptorul de fișier \fIfd\fP se referă la un fișier, altul decât un soclu, și a fost marcat ca neblocat (\fBO_NONBLOCK\fP), iar citirea ar trebui să fie blocată. A se vedea \fBopen\fP(2) pentru mai multe detalii privind marcajul \fBO_NONBLOCK\fP. .TP \fBEAGAIN\fP sau \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux Descriptorul de fișier \fIfd\fP se referă la un soclu și a fost marcat ca fiind neblocat (\fBO_NONBLOCK\fP), 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. .TP \fBEBADF\fP \fIfd\fP nu este un descriptor de fișier valid sau nu este deschis pentru citire. .TP \fBEFAULT\fP \fImemoria\-tampon\fP se află în afara spațiului dvs. de adrese accesibil. .TP \fBEINTR\fP Apelul a fost întrerupt de un semnal înainte ca datele să fie citite; a se vedea \fBsignal\fP(7). .TP \fBEINVAL\fP \fIfd\fP este atașat la un obiect care nu este adecvat pentru citire; sau fișierul a fost deschis cu fanionul \fBO_DIRECT\fP și fie adresa specificată în \fIbuf\fP, fie valoarea specificată în \fIcount\fP, fie decalajul fișierului nu este aliniat corespunzător. .TP \fBEINVAL\fP \fIfd\fP a fost creat printr\-un apel la \fBtimerfd_create\fP(2) și o dimensiune greșită a memoriei tampon a fost furnizată lui \fBread\fP(); a se vedea \fBtimerfd_create\fP(2) pentru informații suplimentare. .TP \fBEIO\fP 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ă \fBSIGTTIN\fP, 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 \fBEIO\fP 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 \fILocuri pierdute\fP din \fBfcntl\fP(2) pentru mai multe detalii. .TP \fBEISDIR\fP \fIfd\fP se referă la un director. .PP Pot apărea și alte erori, în funcție de obiectul conectat la \fIfd\fP. .SH STANDARDE POSIX.1\-2008. .SH ISTORIC SVr4, 4.3BSD, POSIX.1\-2001. .SH NOTE .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 În Linux, \fBread\fP() (ș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). .PP Î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 \fIst_atime\fP (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 \fIst_atime\fP 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. .SH 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”): .PP .RS 4 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: ... .RE .PP .\" http://thread.gmane.org/gmane.linux.kernel/1649458 .\" From: Michael Kerrisk (man-pages gmail.com> .\" Subject: Update of file offset on write() etc. is non-atomic with I/O .\" Date: 2014-02-17 15:41:37 GMT .\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems .\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4 .\" Author: Linus Torvalds .\" Date: Mon Mar 3 09:36:58 2014 -0800 .\" .\" vfs: atomic f_pos accesses as per POSIX Printre API\-urile enumerate ulterior se numără \fBread\fP() și \fBreadv\fP(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 \fBopen\fP(2)) efectuau un \fBread\fP() (sau \fBreadv\fP(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. .SH "CONSULTAȚI ȘI" \fBclose\fP(2), \fBfcntl\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2), \fBpread\fP(2), \fBreaddir\fP(2), \fBreadlink\fP(2), \fBreadv\fP(2), \fBselect\fP(2), \fBwrite\fP(2), \fBfread\fP(3) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .