#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 );
Feature Test Macro Requirements for glibc (see feature_test_macros(7) ):
getline(), getdelim():
_GNU_SOURCE
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
- Before glibc 2.10:
If *lineptr is set to NULL and *n is set 0 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.
Alternatively, before calling getline(), *lineptr can contain a pointer to a malloc(3) -allocated buffer *n bytes in size. If the buffer is not large enough to hold the line, getline() resizes it with realloc(3) , updating *lineptr and *n as necessary.
In either case, on a successful call, *lineptr and *n will be updated to reflect the buffer address and allocated size respectively.
getdelim() works like getline(), except that a line delimiter other than newline can be specified as the delimiter argument. As with getline(), a delimiter character is not added if one was not present in the input before end of file was reached.
Both functions return -1 on failure to read a line (including end-of-file condition). In the event of an error, errno is set to indicate the cause.
#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("Retrieved line of length %zu :\n", read); printf("%s", line); } free(line); fclose(stream); exit(EXIT_SUCCESS); }