### 4.12 `fgets`—get character string from a file or stream

Synopsis

         #include <stdio.h>
         char *fgets(char *restrict buf, int n, FILE *restrict fp);

         #include <stdio.h>
         char *_fgets_r(struct _reent *ptr, char *restrict buf, int n, FILE *restrict fp);

Description
Reads at most n-1 characters from fp until a newline is found. The characters including to the newline are stored in buf. The buffer is terminated with a 0.

The `_fgets_r` function is simply the reentrant version of `fgets` and is passed an additional reentrancy structure pointer: ptr.

Returns
`fgets` returns the buffer passed to it, with the data filled in. If end of file occurs with some data already accumulated, the data is returned with no other indication. If no data are read, NULL is returned instead.

Portability
`fgets` should replace all uses of `gets`. Note however that `fgets` returns all of the data, while `gets` removes the trailing newline (with no indication that it has done so.)

Supporting OS subroutines required: `close`, `fstat`, `isatty`, `lseek`, `read`, `sbrk`, `write`.