| FGETLN(3) | Library Functions Manual | FGETLN(3) | 
fgetln —
#include <stdio.h>
char *
  
  fgetln(FILE
    * restrict stream, size_t
    * restrict len);
fgetln() function returns a pointer to the next line
  from the stream referenced by stream. This line is
  not a C string as it does not end with a terminating
  NUL character. The length of the line, including the
  final newline, is stored in the memory location to which
  len points. (Note, however, that if the line is the last
  in a file that does not end in a newline, the returned text will not contain a
  newline.)
NULL is returned. The fgetln()
  function does not distinguish between end-of-file and error; the routines
  feof(3) and
  ferror(3) must be used to
  determine which occurred. If an error occurs, the global variable
  errno is set to indicate the error. The end-of-file
  condition is remembered, even on a terminal, and all subsequent attempts to
  read will return NULL until the condition is cleared
  with clearerr(3).
The text to which the returned pointer points may be modified, provided that no changes are made beyond the returned size. These changes are lost as soon as the pointer becomes invalid.
EBADF]The fgetln() function may also fail and
    set errno for any of the errors specified for the
    routines fflush(3),
    malloc(3),
    read(2),
    stat(2), or
    realloc(3).
fgetln() function first appeared in
  4.4BSD.
	char *buf, *lbuf;
	size_t len;
	while ((lbuf = buf = fgetln(fp, &len)) != NULL) {
		if (len > 0 && buf[len - 1] == '\n')
			buf[len - 1] = '\0';
		else if ((lbuf = strndup(buf, len + 1)) == NULL)
			err(1, NULL);
		printf("%s\n", lbuf);
		if (lbuf != buf)
			free(lbuf);
	}
| July 4, 2018 | NetBSD 9.4 |