Provided by:
manpages-pl-dev_20060617-1_all 
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)