getline(3)

NUME
getline, getdelim - intrare de șiruri delimitate

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <stdio.h>

ssize_t getline(char **restrict lineptr, size_t *restrict n,
                FILE *restrict stream);
ssize_t getdelim(char **restrict lineptr, size_t *restrict n,
                int delim, FILE *restrict stream);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

getline(), getdelim():
    Începând cu glibc 2.10
        _POSIX_C_SOURCE >= 200809L
    Înainte de glibc 2.10:
        _GNU_SOURCE

DESCRIERE
getline() citește o linie întreagă din stream, stocând adresa din memoria tampon care conține textul în *lineptr. Memoria tampon este terminată cu null și include caracterul de linie nouă, dacă a fost găsit unul.

Dacă *lineptr este stabilit la NULL înainte de apel, atunci getline() va aloca o memorie tampon pentru stocarea liniei. Această memorie tampon trebuie eliberată de către programul utilizatorului chiar dacă getline() a eșuat.

Alternativ, înainte de a apela getline(), *lineptr poate conține un indicator la o memorie tampon alocată de malloc(3) cu o dimensiune de *n octeți. În cazul în care memoria tampon nu este suficient de mare pentru a conține linia, getline() o redimensionează cu realloc(3), actualizând *lineptr și *n, după cum este necesar.

În ambele cazuri, la un apel reușit, *lineptr și *n vor fi actualizate pentru a reflecta adresa memoriei tampon și, respectiv, dimensiunea alocată.

getdelim() funcționează ca getline(), cu excepția faptului că un delimitator de linie, altul decât linia nouă, poate fi specificat ca argument delimiter. La fel ca în cazul getline(), nu se adaugă un caracter de delimitare dacă nu a fost prezent unul în intrare înainte de a se ajunge la sfârșitul fișierului.

VALOAREA RETURNATĂ
În caz de succes, getline() și getdelim() returnează numărul de caractere citite, inclusiv caracterul de delimitare, dar fără a include octetul de terminare nul („\0”). Această valoare poate fi utilizată pentru a gestiona octeții nuli încorporați în linia citită.

La sfârșitul fișierului, ambele funcții returnează -1 cu indicatorul de sfârșit de fișier al fluxului de fișiere activat. În caz de eroare, ambele funcții returnează -1 cu indicatorul de eroare a fluxului de fișiere activat, iar errno este configurată pentru a indica eroarea.

Dacă *lineptr a fost stabilit la NULL înainte de apel, atunci memoria tampon trebuie eliberată de către programul utilizatorului chiar și în caz de eșec.

ERORI-IEȘIRE

EINVAL
    Argumente incorecte (n sau lineptr este NULL, sau stream nu este valid).

ENOMEM
    A eșuat alocarea sau realocarea memoriei tampon de linie.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
getline(), getdelim() | Siguranța firelor | MT-Safe

STANDARDE
POSIX.1-2008.

ISTORIC
GNU, POSIX.1-2008.

EXEMPLE
    #define _GNU_SOURCE
    #include <stdio.h>
    #include <stdlib.h>

    int
    main(int argc, char *argv[])
    {
        FILE *stream;
        char *line = NULL;
        size_t size = 0;
        ssize_t nread;

        if (argc != 2) {
            fprintf(stderr, "Utilizare: %s <fișier>\n", argv[0]);
            exit(EXIT_FAILURE);
        }

        stream = fopen(argv[1], "r");
        if (stream == NULL) {
            perror("fopen");
            exit(EXIT_FAILURE);
        }

        while ((nread = getline(&line, &size, stream)) != -1) {
            printf("Linie preluată de lungime %zd:\n", nread);
            fwrite(line, nread, 1, stdout);
        }

        free(line);
        fclose(stream);
        exit(EXIT_SUCCESS);
    }

CONSULTAȚI ȘI
read(2), fgets(3), fopen(3), fread(3), scanf(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 (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.