Provided by: manpages-pl-dev_4.13-4_all bug

NAZWA

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

SKŁADNIA

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

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       getline(), getdelim():
           Od glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Przed glibc 2.10:
               _GNU_SOURCE

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 ustawione na NULL i *n jest ustawione na 0 przed wywołaniem, to funkcja
       getline() przydziela bufor dla umieszczenia w nim zawartości  linii.  Bufor  ten  powinien
       zostać zwolniony przez program użytkownika nawet wówczas, gdy getline() zawiedzie.

       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  go  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 ("\0"). Wartość
       ta może służyć to wychwycenia znaków null zawartych 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).  W  razie  wystąpienia  błędu  ustawiana  jest  zmienna  errno  aby wskazać
       przyczynę.

BŁĘDY

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

       ENOMEM Nie powiódł się przydział pamięci dla bufora linii.

ATRYBUTY

       Informacje  o  pojęciach  używanych  w  tym  rozdziale   można   znaleźć   w   podręczniku
       attributes(7).

       ┌──────────────────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├──────────────────────┼────────────────────────┼─────────┤
       │getline(), getdelim() │ Bezpieczeństwo wątkowe │ MT-Safe │
       └──────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

       Zarówno  getline(), jak i getdelim() są rozszerzeniami GNU. Zostały dołączone do standardu
       POSIX.1-2008.

PRZYKŁADY

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

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

           if (argc != 2) {
               fprintf(stderr, "Użycie: %s <file>\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("Retrieved line of length %zd:\n", nread);
               fwrite(line, nread, 1, stdout);
           }

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

ZOBACZ TAKŻE

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

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  5.10  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

T◈UMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Andrzej  Krzysztofowicz
       <ankry@green.mf.pg.gda.pl>,   Robert   Luberda   <robert@debian.org>   i   Michał   Kułach
       <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe  informacje  o  warunkach  licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub  nowszej.  Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres listy dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.