NAME
getdelim
, getline
— get a line from a
stream
LIBRARY
library “libc”
SYNOPSIS
#include
<stdio.h>
ssize_t
getdelim
(char
** restrict linep, size_t
* restrict linecapp, int
delimiter, FILE *
restrict stream);
ssize_t
getline
(char
** restrict linep, size_t
* restrict linecapp, FILE
* restrict stream);
DESCRIPTION
Thegetdelim
()
function reads a line from stream, delimited by the
character delimiter. The
getline
()
function is equivalent to getdelim
() with the newline
character as the delimiter. The delimiter character is included as part of the
line, unless the end of the file is reached.
The caller may provide a pointer to a malloced buffer
for the line in *linep, and the capacity of that
buffer in *linecapp. These functions expand the buffer
as needed, as if via
realloc
().
If linep points to a NULL
pointer, a new buffer will be allocated. In either case,
*linep and *linecapp will be
updated accordingly.
RETURN VALUES
The getdelim
() and
getline
() functions return the number of characters
stored in the buffer, excluding the terminating NUL
character. The value -1 is returned if an error occurs, or if end-of-file is
reached.
The functions do not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred.
EXAMPLES
The following code fragment reads lines from a file and writes
them to standard output. The fwrite
() function is
used in case the line contains embedded NUL
characters.
char *line = NULL; size_t linecap = 0; ssize_t linelen; while ((linelen = getline(&line, &linecap, fp)) > 0) fwrite(line, linelen, 1, stdout); free(line); if (ferror(fp)) perror("getline");
ERRORS
These functions may fail if:
- [
EINVAL
] - Either linep or linecapp is
NULL
. - [
EOVERFLOW
] - No delimiter was found in the first
SSIZE_MAX
characters.
These functions may also fail due to any of the errors specified
for fgets
() and
malloc
().
SEE ALSO
STANDARDS
The getdelim
() and
getline
() functions conform to IEEE
Std 1003.1-2008 (“POSIX.1”).
HISTORY
These routines first appeared in DragonFly 2.3.
BUGS
There are no wide character versions of
getdelim
() or getline
().