stdin(3)

NUME
stdin, stdout, stderr - fluxuri In/Ieș standard

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <stdio.h>

FIȘIER extern *stdin;
FIȘIER extern *stdout;
FIȘIER extern *stderr;

DESCRIERE
În condiții normale, fiecare program UNIX are trei fluxuri deschise la pornire, unul pentru intrare, unul pentru ieșire și unul pentru afișarea mesajelor de diagnosticare sau de eroare. Aceste fluxuri sunt de obicei atașate la terminalul utilizatorului (a se vedea tty(4)), dar se pot referi în schimb la fișiere sau la alte dispozitive, în funcție de ceea ce a ales să configureze procesul părinte. (A se vedea, de asemenea, secțiunea „Redirecționare” din sh(1).)

Fluxul de intrare este denumit „intrarea standard”; fluxul de ieșire este denumit „ieșirea standard”; iar fluxul de eroare este denumit „ieșirea de eroare standard”. Acești termeni sunt prescurtați pentru a forma simbolurile utilizate pentru a se referi la aceste fișiere, și anume stdin, stdout și stderr.

Fiecare dintre aceste simboluri este o macrocomandă stdio(3) de tip indicator (pointer) la FIȘIER și poate fi utilizată cu funcții precum fprintf(3) sau fread(3).

Din moment ce FIȘIERELE sunt o învăluire-tampon în jurul descriptorilor de fișiere UNIX, aceleași fișiere de bază pot fi accesate și prin utilizarea interfeței de fișiere UNIX brute, adică prin funcții precum read(2) și lseek(2).

La pornirea programului, numărul întreg al descriptorilor de fișiere asociat cu fluxurile stdin, stdout și stderr este 0, 1 și, respectiv, 2. Simbolurile de preprocesor STDIN_FILENO, STDOUT_FILENO și STDERR_FILENO sunt definite cu aceste valori în <unistd.h>. (Aplicarea freopen(3) la unul dintre aceste fluxuri poate schimba numărul descriptorului de fișier asociat fluxului).

Rețineți că utilizarea mixtă a FIȘIERELOR și a descriptorilor de fișiere brute poate produce rezultate neașteptate și, în general, trebuie evitată. (Pentru masochiștii dintre dumneavoastră: POSIX.1, secțiunea 8.2.3, descrie în detaliu modul în care ar trebui să funcționeze această interacțiune). O regulă generală este că descriptorii de fișiere sunt gestionați în nucleu, în timp ce stdio este doar o bibliotecă. Acest lucru înseamnă, de exemplu, că, după un exec(3), procesul-copil moștenește toți descriptorii de fișiere deschise, dar toate fluxurile vechi devin inaccesibile.

Deoarece simbolurile stdin, stdout și stderr sunt specificate ca fiind macrocomenzi, atribuirea acestora nu este portabilă. Fluxurile standard pot fi făcute să se refere la fișiere diferite cu ajutorul funcției de bibliotecă freopen(3), introdusă special pentru a face posibilă reasignarea stdin, stdout și stderr. Fluxurile standard sunt închise printr-un apel la exit(3) și prin terminarea normală a programului.

STANDARDE
C11, POSIX.1-2008.

Standardele stipulează, de asemenea, că aceste trei fluxuri trebuie să fie deschise la pornirea programului.

ISTORIC
C89, POSIX.1-2001.

NOTE
Fluxul stderr nu are memorie tampon. Fluxul stdout este cu memorie tampon de linie atunci când este îndreptat către un terminal. Liniile parțiale nu vor apărea până când nu se apelează fflush(3) sau exit(3), sau până când nu se imprimă o nouă linie. Acest lucru poate produce rezultate neașteptate, în special în cazul ieșirii de depanare. Modul de utilizare a memoriei tampon al fluxurilor standard (sau al oricărui alt flux) poate fi schimbat cu ajutorul apelului setbuf(3) sau setvbuf(3). Rețineți că, în cazul în care stdin este asociat cu un terminal, este posibil să fie utilizată, de asemenea, memoria tampon de intrare din controlorul terminalului, fără nicio legătură cu cea a stdio. (Într-adevăr, în mod normal, intrarea terminalului este în memoria tampon direct din nucleu). Această gestionare a intrării în nucleu poate fi modificată cu ajutorul unor apeluri precum tcsetattr(3); a se vedea, de asemenea, stty(1) și termios(3).

CONSULTAȚI ȘI
csh(1), sh(1), open(2), fopen(3), stdio(3)

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

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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.