getline

Autres langues

Langue: pl

Autres versions - même langue

Version: 2001-10-07 (fedora - 25/11/07)

Section: 3 (Bibliothèques de fonctions)

NAZWA

getline, getdelim - wprowadzanie łańcuchów rozgraniczonych

SKŁADNIA

 #define _GNU_SOURCE
 #include <stdio.h>
 
 ssize_t getline(char **lineptr, size_t *n, FILE *stream);
 ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
 
 

OPIS

getline() odczytuje całą linię, przechowując adres bufora zawierającego tekst w *lineptr. Bufor jest zakończony znakiem NUL i zawiera znak nowej linii, jeśli go napotkano.

Gdy *lineptr jest równe NULL, funkcja getline() przydziela bufor dla umieszczenia w nim zawartości linii, który to bufor musi zostać zwolniony przez program użytkownika. Alternatywnie, przed wywołaniem getline(), *lineptr może zawierać wskaźnik do bufora przydzielonego za pomocą malloc() o rozmiarze *n bajtów. Gdy rozmiar bufora nie jest wystarczający do umieszczenia w nim odczytanej linii, getline() rozszerzy bufor do odpowiedniego rozmiaru za pomocą realloc(), modyfikując *lineptr i *n, jeśli będzie to potrzebne. W każdym razie, po pomyślnym wywołaniu *lineptr i *n będą zaktualizowane tak, aby odzwierciedlić, odpowiednio, adres i rozmiar bufora.

getdelim() działa jak getline(), z tym wyjątkiem, że jako argument delimiter można podać ogranicznik linii inny niż znak nowej linii. Podobnie jak dla getline(), znak ogranicznika nie jest dodawany, gdy nie występował w danych wejściowych przed osiągnięciem końca pliku.

WARTOŚĆ ZWRACANA

Po pomyślnym zakończeniu, getline() i getdelim() zwracają liczbę odczytanych znaków, łącznie ze znakiem ogranicznika, ale nie włączając kończącego znaku NUL. Wartość ta może służyć to wychwycenia znaków NUL zawartych w odczytanaj linii.

Obie funkcje zwracają -1, gdy nie uda się odczytać linii (włączając w to próbę czytania na końcu pliku).

BŁĘDY

EINVAL
Błędne wartości parametrów (n lub lineptr równe NULL, lub nieprawidłowy stream ).

PRZYKŁAD

 #define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 
 int main(void)
 {
         FILE * fp;
         char * line = NULL;
         size_t len = 0;
         ssize_t read;
         fp = fopen("/etc/motd", "r");
         if (fp == NULL)
                 exit(EXIT_FAILURE);
         while ((read = getline(&line, &len, fp)) != -1) {
                 printf("Odczytano linię o długości %zu :\n", read);
                 printf("%s", line);
         }
         if (line)
                 free(line);
         return EXIT_SUCCESS;
 }
 

ZGODNE Z

Zarówno getline(), jak i getdelim() są rozszerzeniami GNU. Są one dostępne od libc 4.6.27.

ZOBACZ TAKŻE

read(2), fopen(3), fread(3), gets(3), fgets(3), scanf(3)