(libc.info.gz) How Unread

Info Catalog (libc.info.gz) Unreading Idea (libc.info.gz) Unreading
 
 12.10.2 Using 'ungetc' To Do Unreading
 --------------------------------------
 
 The function to unread a character is called 'ungetc', because it
 reverses the action of 'getc'.
 
  -- Function: int ungetc (int C, FILE *STREAM)
      Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
      |  POSIX Safety Concepts.
 
      The 'ungetc' function pushes back the character C onto the input
      stream STREAM.  So the next input from STREAM will read C before
      anything else.
 
      If C is 'EOF', 'ungetc' does nothing and just returns 'EOF'.  This
      lets you call 'ungetc' with the return value of 'getc' without
      needing to check for an error from 'getc'.
 
      The character that you push back doesn't have to be the same as the
      last character that was actually read from the stream.  In fact, it
      isn't necessary to actually read any characters from the stream
      before unreading them with 'ungetc'!  But that is a strange way to
      write a program; usually 'ungetc' is used only to unread a
      character that was just read from the same stream.  The GNU C
      Library supports this even on files opened in binary mode, but
      other systems might not.
 
      The GNU C Library only supports one character of pushback--in other
      words, it does not work to call 'ungetc' twice without doing input
      in between.  Other systems might let you push back multiple
      characters; then reading from the stream retrieves the characters
      in the reverse order that they were pushed.
 
      Pushing back characters doesn't alter the file; only the internal
      buffering for the stream is affected.  If a file positioning
      function (such as 'fseek', 'fseeko' or 'rewind';  File
      Positioning) is called, any pending pushed-back characters are
      discarded.
 
      Unreading a character on a stream that is at end of file clears the
      end-of-file indicator for the stream, because it makes the
      character of input available.  After you read that character,
      trying to read again will encounter end of file.
 
  -- Function: wint_t ungetwc (wint_t WC, FILE *STREAM)
      Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
      |  POSIX Safety Concepts.
 
      The 'ungetwc' function behaves just like 'ungetc' just that it
      pushes back a wide character.
 
    Here is an example showing the use of 'getc' and 'ungetc' to skip
 over whitespace characters.  When this function reaches a non-whitespace
 character, it unreads that character to be seen again on the next read
 operation on the stream.
 
      #include <stdio.h>
      #include <ctype.h>
 
      void
      skip_whitespace (FILE *stream)
      {
        int c;
        do
          /* No need to check for 'EOF' because it is not
             'isspace', and 'ungetc' ignores 'EOF'.  */
          c = getc (stream);
        while (isspace (c));
        ungetc (c, stream);
      }
 
Info Catalog (libc.info.gz) Unreading Idea (libc.info.gz) Unreading
automatically generated by info2html