Scroll to navigation

GETLINE(3) Podręcznik programisty Linuksa GETLINE(3)

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 || _XOPEN_SOURCE >= 700
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 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 (w takim przypadku wartość *n jest ignorowana).
 

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. 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).

BŁĘDY

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

WERSJE

Powyższe funkcje są dostępne od libc 4.6.27.

ZGODNE Z

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

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("Pobrano linię o długości %zu :\n", read); printf("%s", line); }
free(line); exit(EXIT_SUCCESS); }

ZOBACZ TAKŻE

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

O STRONIE

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

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl> i Robert Luberda <robert@debian.org>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.40 oryginału.
2010-06-12 GNU