File input/output
The <stdio.h>
header provides generic file operation support and supplies functions with narrow character input/output capabilities.
The <wchar.h>
header supplies functions with wide character input/output capabilities.
I/O streams are objects of type FILE
that can only be accessed and manipulated through pointers of type FILE*
(Note: while it may be possible to create a local object of type FILE
by dereferencing and copying a valid FILE*
, using the address of such copy in the I/O functions is undefined behavior). Each stream is associated with an external physical device (file, standard input stream, printer, serial port, etc).
I/O streams can be used for both unformatted and formatted input and output. They are locale-sensitive and may perform wide/multibyte conversions as necessary. All streams access the same locale object: the one most recently installed with setlocale
.
Besides the system-specific information necessary to access the device (e.g. a POSIX file descriptor), each stream object holds the following:
fpos_t
), which, for wide character streams, includes the parse state (an object of type mbstate_t
(C95)).Narrow and wide orientation
A newly opened stream has no orientation. The first call to fwide
or to any I/O function establishes the orientation: a wide I/O function makes the stream wide-oriented, a narrow I/O function makes the stream narrow-oriented. Once set, the orientation can only be changed with freopen
. Narrow I/O functions cannot be called on a wide-oriented stream; wide I/O functions cannot be called on a narrow-oriented stream. Wide I/O functions convert between wide and multibyte characters as if by calling mbrtowc
and wcrtomb
. Unlike the multibyte character strings that are valid in a program, multibyte character sequences in the file may contain embedded nulls and do not have to begin or end in the initial shift state.
POSIX requires that the LC_CTYPE facet of the currently installed C locale is stored within the stream object the moment its orientation becomes wide, and is used for all future I/O on this stream until the orientation is changed, regardless of any subsequent calls to setlocale
.
Binary and text modes
A text stream is an ordered sequence of characters composed into lines (zero or more characters plus a terminating '\n'
). Whether the last line requires a terminating '\n'
is implementation-defined. Characters may have to be added, altered, or deleted on input and output to conform to the conventions for representing text in the OS (in particular, C streams on Windows OS convert \n
to \r\n
on output, and convert \r\n
to \n
on input).
Data read in from a text stream is guaranteed to compare equal to the data that were earlier written out to that stream only if all of the following is true:
- the data consist only of printing characters and the control characters
\t
and\n
(in particular, on Windows OS, the character'\0x1A'
terminates input) - no \n is immediately preceded by a space character (space characters that are written out immediately before a \n may disappear when read)
- the last character is \n
A binary stream is an ordered sequence of characters that can transparently record internal data. Data read in from a binary stream always equals to the data that were earlier written out to that stream. Implementations are only allowed to append a number of null characters to the end of the stream. A wide binary stream doesn't need to end in the initial shift state.
POSIX implementations do not distinguish between text and binary streams (there is no special mapping for \n or any other characters).
Functions
File access |
|
Defined in header <stdio.h> |
|
---|---|
(C11) | opens a file (function) |
(C11) | open an existing stream with a different name (function) |
closes a file (function) |
|
synchronizes an output stream with the actual file (function) |
|
sets the buffer for a file stream (function) |
|
sets the buffer and its size for a file stream (function) |
|
Defined in header <wchar.h> |
|
(C95) | switches a file stream between wide character I/O and narrow character I/O (function) |
Direct input/output |
|
Defined in header <stdio.h> |
|
reads from a file (function) |
|
writes to a file (function) |
|
Unformatted input/output |
|
Narrow character |
|
Defined in header <stdio.h> |
|
gets a character from a file stream (function) |
|
gets a character string from a file stream (function) |
|
writes a character to a file stream (function) |
|
writes a character string to a file stream (function) |
|
reads a character from stdin (function) |
|
(removed in C11)(since C11) | reads a character string from stdin (function) |
writes a character to stdout (function) |
|
writes a character string to stdout (function) |
|
puts a character back into a file stream (function) |
|
Wide character |
|
Defined in header <wchar.h> |
|
(C95) | gets a wide character from a file stream (function) |
(C95) | gets a wide string from a file stream (function) |
(C95) | writes a wide character to a file stream (function) |
(C95) | writes a wide string to a file stream (function) |
(C95) | reads a wide character from stdin (function) |
(C95) | writes a wide character to stdout (function) |
(C95) | puts a wide character back into a file stream (function) |
Formatted input/output |
|
Narrow character |
|
Defined in header <stdio.h> |
|
(C11)(C11)(C11) | reads formatted input from stdin , a file stream or a buffer (function) |
(C99)(C99)(C99)(C11)(C11)(C11) | reads formatted input from stdin , a file stream or a bufferusing variable argument list (function) |
(C99)(C11)(C11)(C11)(C11) | prints formatted output to stdout , a file stream or a buffer (function) |
(C99)(C11)(C11)(C11)(C11) | prints formatted output to stdout , a file stream or a bufferusing variable argument list (function) |
Wide character |
|
Defined in header <wchar.h> |
|
(C95)(C95)(C95)(C11)(C11)(C11) | reads formatted wide character input from stdin , a file stream or a buffer (function) |
(C99)(C99)(C99)(C11)(C11)(C11) | reads formatted wide character input from stdin , a file streamor a buffer using variable argument list (function) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) | prints formatted wide character output to stdout , a file stream or a buffer (function) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) | prints formatted wide character output to stdout , a file streamor a buffer using variable argument list (function) |
File positioning |
|
Defined in header <stdio.h> |
|
returns the current file position indicator (function) |
|
gets the file position indicator (function) |
|
moves the file position indicator to a specific location in a file (function) |
|
moves the file position indicator to a specific location in a file (function) |
|
moves the file position indicator to the beginning in a file (function) |
|
Error handling |
|
Defined in header <stdio.h> |
|
clears errors (function) |
|
checks for the end-of-file (function) |
|
checks for a file error (function) |
|
displays a character string corresponding of the current error to stderr (function) |
|
Operations on files |
|
Defined in header <stdio.h> |
|
erases a file (function) |
|
renames a file (function) |
|
(C11) | returns a pointer to a temporary file (function) |
(C11) | returns a unique filename (function) |
Types
Defined in header <stdio.h> |
|
---|---|
Type | Definition |
FILE | type, capable of holding all information needed to control a C I/O stream |
fpos_t | type, capable of uniquely specifying a position and mutibyte parser state in a file |
Macros
Defined in header <stdio.h> |
|
---|---|
stdinstdoutstderr | expression of type FILE* associated with the input stream expression of type FILE* associated with the output stream expression of type FILE* associated with the error output stream (macro constant) |
EOF | integer constant expression of type int and negative value (macro constant) |
FOPEN_MAX | maximum number of files that can be open simultaneously (macro constant) |
FILENAME_MAX | size needed for an array of char to hold the longest supported file name (macro constant) |
BUFSIZ | size of the buffer used by setbuf() (macro constant) |
_IOFBF_IOLBF_IONBF | argument to setvbuf() indicating fully buffered I/O argument to setvbuf() indicating line buffered I/O argument to setvbuf() indicating unbuffered I/O (macro constant) |
SEEK_SETSEEK_CURSEEK_END | argument to fseek() indicating seeking from beginning of the file argument to fseek() indicating seeking from the current file position argument to fseek() indicating seeking from end of the file (macro constant) |
TMP_MAXTMP_MAX_S
(C11) | maximum number of unique filenames that can be generated by tmpnam maximum number of unique filenames that can be generated by tmpnam_s (macro constant) |
L_tmpnamL_tmpnam_s
(C11) | size needed for an array of char to hold the result of tmpnam size needed for an array of char to hold the result of tmpnam_s (macro constant) |
References
- C11 standard (ISO/IEC 9899:2011):
- 7.21 Input/output <stdio.h> (p: 296-339)
- 7.29 Extended multibyte and wide character utilities <wchar.h> (p: 402-446)
- 7.31.11 Input/output <stdio.h> (p: 456)
- 7.31.16 Extended multibyte and wide character utilities <wchar.h> (p: 456)
- K.3.5 Input/output <stdio.h> (p: 586-603)
- C99 standard (ISO/IEC 9899:1999):
- 7.19 Input/output <stdio.h> (p: 262-305)
- 7.24 Extended multibyte and wide character utilities <wchar.h> (p: 348-392)
- 7.26.9 Input/output <stdio.h> (p: 402)
- 7.26.12 Extended multibyte and wide character utilities <wchar.h> (p: 402)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.9 INPUT/OUTPUT <stdio.h>
- 4.13.6 Input/output <stdio.h>
See also
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/io