getline, getdelim - wprowadzanie łańcuchów rozgraniczonych
Standardowa biblioteka C (
libc,
-lc)
#include <stdio.h>
ssize_t getline(char **restrict lineptr, size_t *restrict n,
FILE *restrict stream);
ssize_t getdelim(char **restrict lineptr, size_t *restrict n,
int delim, FILE *restrict stream);
getline(),
getdelim():
Od glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Przed glibc 2.10:
_GNU_SOURCE
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.
If
*lineptr is set to NULL before the call, then
getline() will
allocate a buffer for storing the line. This buffer should be freed by the
user program even if
getline() failed.
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.
On success,
getline() and
getdelim() return the number of
characters read, including the delimiter character, but not including the
terminating null byte ('\0'). This value can be used to handle embedded null
bytes in the line read.
Both functions return -1 on failure to read a line (including end-of-file
condition). In the event of a failure,
errno is set to indicate the
error.
If
*lineptr was set to NULL before the call, then the buffer should be
freed by the user program even on failure.
- EINVAL
- Błędne wartości parametrów
(n lub lineptr równe NULL lub nieprawidłowy
stream).
- ENOMEM
- Nie powiódł się przydział
pamięci dla bufora linii.
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 |
Zarówno
getline(), jak i
getdelim() są
rozszerzeniami GNU. Zostały dołączone do standardu
POSIX.1-2008.
#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);
}
read(2),
fgets(3),
fopen(3),
fread(3),
scanf(3)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Andrzej Krzysztofowicz <
[email protected]>, Robert
Luberda <
[email protected]> i Michał Kułach
<
[email protected]>
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 listy dyskusyjnej
[email protected]