GETLINE(3) Podrcznik programisty Linuksa GETLINE(3)
getline, getdelim - wprowadzanie acuchw rozgraniczonych
#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);
getline() odczytuje ca lini ze strumienia stream, przechowujc adres
bufora zawierajcego tekst w *lineptr. Bufor jest zakoczony znakiem null
i zawiera znak nowej linii, jeli go napotkano.
Gdy *lineptr jest rwne NULL, to funkcja getline() przydziela bufor dla
umieszczenia w nim zawartoci linii, ktry to bufor musi zosta zwolniony
przez program uytkownika. Alternatywnie, przed wywoaniem getline()
*lineptr moe zawiera wskanik do bufora przydzielonego za pomoc malloc()
o rozmiarze *n bajtw. Gdy rozmiar bufora nie jest wystarczajcy do
umieszczenia w nim odczytanej linii, getline() rozszerzy bufor do
odpowiedniego rozmiaru za pomoc realloc(), modyfikujc *lineptr i *n,
jeli bdzie to potrzebne. W kadym razie, po pomylnym wywoaniu *lineptr i
*n bd zaktualizowane tak, aby odzwierciedli, odpowiednio, adres i
rozmiar bufora.
getdelim() dziaa jak getline(), z tym wyjtkiem e jako argument delim-
iter mona poda ogranicznik linii inny ni znak nowej linii. Podobnie jak
dla getline(), znak ogranicznika nie jest dodawany, gdy nie wystpowa w
danych wejciowych przed osigniciem koca pliku.
Po pomylnym zakoczeniu, getline() i getdelim() zwracaj liczb odczy-
tanych znakw, cznie ze znakiem ogranicznika, ale nie wczajc koczcego
bajtu null. Warto ta moe suy to wychwycenia znakw nullzawartych w
odczytanej linii.
Obie funkcje zwracaj -1, gdy nie uda si odczyta linii (wczajc w to prb
czytania na kocu pliku).
EINVAL Bdne wartoci parametrw (n lub lineptr rwne NULL, lub nieprawid-
owy stream ).
#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 dugoci %zu :\n", read);
printf("%s", line);
}
if (line)
free(line);
return EXIT_SUCCESS;
}
Zarwno getline(), jak i getdelim() s rozszerzeniami GNU. S one dostpne
od libc 4.6.27.
read(2), fgets(3), fopen(3), fread(3), gets(3), scanf(3)
GNU 2006-05-17 GETLINE(3)