Provided by: manpages-pl-dev_0.7-1_all
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).
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7). ┌──────────────────────┬────────────────────────┬─────────┐ │Interfejs │ Atrybut │ Wartość │ ├──────────────────────┼────────────────────────┼─────────┤ │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ŁAD
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> int main(void) { FILE *stream; char *line = NULL; size_t len = 0; ssize_t read; stream = fopen("/etc/motd", "r"); if (stream == NULL) exit(EXIT_FAILURE); while ((read = getline(&line, &len, stream)) != -1) { printf("Pobrano wiersz o długości %zu :\n", read); printf("%s", line); } 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 4.07 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 man są: Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>. 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ą 4.07 oryginału.