table of contents
- bullseye 1:4.10.0-1
- bullseye-backports 1:4.18.1-1~bpo11+1
- testing 1:4.18.1-1
- unstable 1:4.18.1-1
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);
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¶
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Ł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¶
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 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres manpages-pl-list@lists.sourceforge.net.
1 listopada 2020 r. | GNU |