setbuf(3) Library Functions Manual setbuf(3)

setbuf, setbuffer, setlinebuf, setvbuf, setvbuf - operații asupra memoriei tampon a fluxurilor

Biblioteca C standard (libc, -lc)

#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);
Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

setbuffer(), setlinebuf():

    Începând cu glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 și versiunile anterioare:
        _BSD_SOURCE

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);

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.

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

C11, POSIX.1-2008.

C89, POSIX.1-2001.

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.

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;
}

stdbuf(1), fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)

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