setbuf(3) | Library Functions Manual | setbuf(3) |
NUME
setbuf, setbuffer, setlinebuf, setvbuf, setvbuf - operații asupra memoriei tampon a fluxurilor
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#include <stdio.h>
int setvbuf(FILE *restrict stream, char buf[restrict .size], int mode, size_t size);
void setbuf(FILE *restrict stream, char *restrict buf); void setbuffer(FILE *restrict stream, char buf[restrict .size], size_t size); void setlinebuf(FILE *stream);
setbuffer(), setlinebuf():
Începând cu glibc 2.19: _DEFAULT_SOURCE glibc 2.19 și versiunile anterioare: _BSD_SOURCE
DESCRIERE
Cele trei tipuri de operații cu memorie tampon disponibile, sunt: fără memorie tampon, cu memorie tampon de bloc și cu memorie tampon de linie. Atunci când un flux de ieșire este fără memorie tampon, informațiile apar în fișierul sau terminalul de destinație imediat ce sunt scrise; atunci când este cu memorie tampon de bloc, mai multe caractere sunt salvate și scrise ca un bloc; atunci când este cu memorie tampon de linie, caracterele sunt salvate până când este emisă o nouă linie sau până când este citită o intrare din orice flux atașat la un dispozitiv terminal (de obicei stdin). Funcția fflush(3) poate fi utilizată pentru a forța ieșirea anticipată a blocului; (a se vedea fclose(3)).
În mod normal, toate fișierele sunt stocate în bloc. În cazul în care un flux se referă la un terminal (așa cum face în mod normal stdout), acesta este stocat în memoria tampon pe linie. Fluxul de eroare standard stderr este întotdeauna fără stocare în memoria tampon în mod implicit.
Funcția setvbuf() poate fi utilizată pe orice flux deschis pentru a modifica memoria tampon. Argumentul mode trebuie să fie una dintre următoarele trei macrocomenzi:
- _IONBF
- fără stocare în memoria tampon
- _IOLBF
- stocare în memoria tampon pe linie
- _IOFBF
- stocare completă în memoria tampon
Cu excepția fișierelor fără memorie tampon, argumentul buf trebuie să indice o memorie tampon cu o lungime de cel puțin size octeți; această memorie tampon va fi utilizată în locul celei curente. În cazul în care argumentul buf este NULL, este afectat doar modul; la următoarea operație de citire sau scriere se va aloca o nouă memorie tampon. Funcția setvbuf() poate fi utilizată numai după deschiderea unui flux și înainte de a se efectua orice altă operațiune asupra acestuia.
Celelalte trei apeluri sunt, de fapt, simple alias pentru apelurile către setvbuf(). Funcția setbuf() este exact echivalentă cu apelul
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
Funcția setbuffer() este identică, cu excepția faptului că dimensiunea memoriei tampon este la latitudinea apelantului, în loc să fie determinată de valoarea implicită BUFSIZ. Funcția setlinebuf() este exact echivalentă cu apelul:
setvbuf(stream, NULL, _IOLBF, 0);
VALOAREA RETURNATĂ
Funcția setvbuf() returnează 0 în caz de succes. În caz de eșec (mode nu este valid sau cererea nu poate fi onorată), returnează o valoare diferită de zero. În caz de eșec, poate configura errno.
Celelalte funcții nu returnează nicio valoare.
ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare |
setbuf(), setbuffer(), setlinebuf(), setvbuf() | Siguranța firelor | MT-Safe |
STANDARDE
ISTORIC
AVERTISMENTE
POSIX notează că valoarea lui errno este nespecificată după un apel la setbuf() și notează, de asemenea, că, din moment ce valoarea lui errno nu trebuie să rămână neschimbată după un apel reușit la setbuf(), aplicațiile ar trebui să utilizeze în schimb setvbuf() pentru a detecta erorile.
ERORI
Trebuie să vă asigurați că spațiul către care indică buf încă mai există în momentul în care stream este închis, ceea ce se întâmplă, de asemenea, la terminarea programului. De exemplu, următorul lucru nu este valabil:
#include <stdio.h> int main(void) { char buf[BUFSIZ]; setbuf(stdout, buf); printf("Salutare lume!\n"); return 0; }
CONSULTAȚI ȘI
stdbuf(1), fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(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.
15 iunie 2024 | Pagini de manual de Linux 6.9.1 |