Provided by: manpages-pl-dev_20060617-1_all bug

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ę ze strumienia stream, przechowując adres
       bufora zawierającego tekst w *lineptr. Bufor  jest  zakończony  znakiem
       null i zawiera znak nowej linii, jeśli go napotkano.

       Gdy *lineptr jest równe NULL, to 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  bajtu  null.  Wartość  ta może służyć to wychwycenia znaków
       nullzawartych w odczytanej 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), fgets(3), fopen(3), fread(3), gets(3), scanf(3)