### 4.66 `ungetc`—push data back into a stream

Synopsis

         #include <stdio.h>
         int ungetc(int c, FILE *stream);

         int _ungetc_r(struct _reent *reent, int c, FILE *stream);

Description
`ungetc` is used to return bytes back to stream to be read again. If c is EOF, the stream is unchanged. Otherwise, the unsigned char c is put back on the stream, and subsequent reads will see the bytes pushed back in reverse order. Pushed byes are lost if the stream is repositioned, such as by `fseek`, `fsetpos`, or `rewind`.

The underlying file is not changed, but it is possible to push back something different than what was originally read. Ungetting a character will clear the end-of-stream marker, and decrement the file position indicator. Pushing back beyond the beginning of a file gives unspecified behavior.

The alternate function `_ungetc_r` is a reentrant version. The extra argument reent is a pointer to a reentrancy structure.

Returns
The character pushed back, or `EOF` on error.

Portability
ANSI C requires `ungetc`, but only requires a pushback buffer of one byte; although this implementation can handle multiple bytes, not all can. Pushing back a signed char is a common application bug.

Supporting OS subroutines required: `sbrk`.