getline(3) Library Functions Manual getline(3) NUME getline, getdelim - intrare de iruri delimitate BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include 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); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): getline(), getdelim(): Incepand cu glibc 2.10 _POSIX_C_SOURCE >= 200809L Inainte de glibc 2.10: _GNU_SOURCE DESCRIERE getline() citete o linie intreaga din stream, stocand adresa din memoria tampon care conine textul in *lineptr. Memoria tampon este terminata cu null i include caracterul de linie noua, daca a fost gasit unul. Daca *lineptr este stabilit la NULL inainte de apel, atunci getline() va aloca o memorie tampon pentru stocarea liniei. Aceasta memorie tampon trebuie eliberata de catre programul utilizatorului chiar daca getline() a euat. Alternativ, inainte de a apela getline(), *lineptr poate conine un indicator la o memorie tampon alocata de malloc(3) cu o dimensiune de *n octei. In cazul in care memoria tampon nu este suficient de mare pentru a conine linia, getline() o redimensioneaza cu realloc(3), actualizand *lineptr i *n, dupa cum este necesar. In ambele cazuri, la un apel reuit, *lineptr i *n vor fi actualizate pentru a reflecta adresa memoriei tampon i, respectiv, dimensiunea alocata. getdelim() funcioneaza ca getline(), cu excepia faptului ca un delimitator de linie, altul decat linia noua, poate fi specificat ca argument delimiter. La fel ca in cazul getline(), nu se adauga un caracter de delimitare daca nu a fost prezent unul in intrare inainte de a se ajunge la sfaritul fiierului. VALOAREA RETURNATA In caz de succes, getline() i getdelim() returneaza numarul de caractere citite, inclusiv caracterul de delimitare, dar fara a include octetul de terminare nul (,,\0"). Aceasta valoare poate fi utilizata pentru a gestiona octeii nuli incorporai in linia citita. Ambele funcii returneaza -1 in cazul in care nu se reuete sa se citeasca o linie (inclusiv in cazul in care se ajunge la sfaritul fiierului). In cazul unui eec, errno este configurata pentru a indica eroarea. Daca *lineptr a fost stabilit la NULL inainte de apel, atunci memoria tampon trebuie eliberata de catre programul utilizatorului chiar i in caz de eec. ERORI-IEIRE EINVAL Argumente incorecte (n sau lineptr este NULL, sau stream nu este valid). ENOMEM A euat alocarea sau realocarea memoriei tampon de linie. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |getline(), getdelim() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ STANDARDE POSIX.1-2008. ISTORIC GNU, POSIX.1-2008. EXEMPLE #define _GNU_SOURCE #include #include int main(int argc, char *argv[]) { FILE *stream; char *line = NULL; size_t len = 0; ssize_t nread; if (argc != 2) { fprintf(stderr, "Utilizare: %s ier>\n", argv[0]); exit(EXIT_FAILURE); } stream = fopen(argv[1], "r"); if (stream == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, stream)) != -1) { printf("Linie preluata de lungime %zd:\n", nread); fwrite(line, nread, 1, stdout); } free(line); fclose(stream); exit(EXIT_SUCCESS); } CONSULTAI I read(2), fgets(3), fopen(3), fread(3), scanf(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 getline(3)