C file input/output
C standard library |
---|
General topics |
Miscellaneous headers |
The C programming language provides many standard library functions for file input and output. These functions make up the bulk of the C standard library header <stdio.h>
.[1] The functionality descends from a "portable I/O package" written by Mike Lesk at Bell Labs in the early 1970s.[2] and officially became part of the Unix operating system in Version 7.[3]
The I/O functionality of C is fairly low-level by modern standards; C abstracts all file operations into operations on streams of bytes, which may be "input streams" or "output streams". Unlike some earlier programming languages, C has no direct support for random-access data files; to read from a record in the middle of a file, the programmer must create a stream, seek to the middle of the file, and then read bytes in sequence from the stream.
The stream model of file I/O was popularized by Unix, which was developed concurrently with the C programming language itself. The vast majority of modern operating systems have inherited streams from Unix, and many languages in the C programming language family have inherited C's file I/O interface with few if any changes (for example, PHP). The C++ standard library reflects the "stream" concept in its syntax, see iostream for details.
Overview of functions
Most of the C file input/output functions are defined in stdio.h
(cstdio
header in C++).
Byte character |
Wide character |
Description | |
---|---|---|---|
File access | fopen | Opens a file (with a non-Unicode filename on Windows and possible UTF-8 filename on Linux) | |
freopen | Opens a different file with an existing stream | ||
fflush | Synchronizes an output stream with the actual file | ||
fclose | closes a file | ||
setbuf | Sets the buffer for a file stream | ||
setvbuf | Sets the buffer and its size for a file stream | ||
fwide | Switches a file stream between wide-character I/O and narrow-character I/O | ||
Direct input/output |
fread | Reads from a file | |
fwrite | Writes to a file | ||
Unformatted input/output |
fgetc getc |
fgetwc getwc |
Reads a byte/wchar_t from a file stream |
fgets | fgetws | Reads a byte/wchar_t line from a file stream | |
fputc putc |
fputwc putwc |
Writes a byte/wchar_t to a file stream | |
fputs | fputws | Writes a byte/wchar_t string to a file stream | |
getchar | getwchar | Reads a byte/wchar_t from stdin | |
|
N/A | Reads a byte string from stdin until a newline or end of file is encountered (deprecated in C99, removed from C11) | |
putchar | putwchar | writes a byte/wchar_t to stdout | |
puts | N/A | Writes a byte string to stdout | |
ungetc | ungetwc | Puts a byte/wchar_t back into a file stream | |
Formatted input/output |
scanf fscanf sscanf |
wscanf fwscanf swscanf |
Reads formatted byte/wchar_t input from stdin,a file stream or a buffer |
vscanf vfscanf vsscanf |
vwscanf vfwscanf vswscanf |
Reads formatted input byte/wchar_t from stdin,a file stream or a buffer using variable argument list | |
printf fprintf sprintf snprintf |
wprintf fwprintf swprintf |
Prints formatted byte/wchar_t output to stdout,a file stream or a buffer | |
vprintf vfprintf vsprintf vsnprintf |
vwprintf vfwprintf vswprintf |
Prints formatted byte/wchar_t output to stdout,a file stream, or a buffer using variable argument list | |
perror | N/A | Writes a description of the current error to stderr | |
File positioning | ftell | Returns the current file position indicator | |
fgetpos | Gets the file position indicator | ||
fseek | moves the file position indicator to a specific location in a file | ||
fsetpos | Moves the file position indicator to a specific location in a file | ||
rewind | Moves the file position indicator to the beginning in a file | ||
Error handling |
clearerr | Clears errors | |
feof | Checks for the end-of-file | ||
ferror | Checks for a file error | ||
Operations on files |
remove | Erases a file | |
rename | renames a file | ||
tmpfile | Returns a pointer to a temporary file | ||
tmpnam | Returns a unique filename |
Constants
Constants defined in the stdio.h
header include:
Name | Notes |
---|---|
EOF | A negative integer of type int used to indicate end-of-file conditions |
BUFSIZ | An integer which is the size of the buffer used by the setbuf() function |
FILENAME_MAX | The size of a char array which is large enough to store the name of any file that can be opened |
FOPEN_MAX | The number of files that may be open simultaneously; will be at least eight |
_IOFBF | An abbreviation for "input/output fully buffered"; it is an integer which may be passed to the setvbuf() function to request block buffered input and output for an open stream |
_IOLBF | An abbreviation for "input/output line buffered"; it is an integer which may be passed to the setvbuf() function to request line buffered input and output for an open stream |
_IONBF | An abbreviation for "input/output not buffered"; it is an integer which may be passed to the setvbuf() function to request unbuffered input and output for an open stream |
L_tmpnam | The size of a char array which is large enough to store a temporary filename generated by the tmpnam() function |
NULL | A macro expanding to the null pointer constant; that is, a constant representing a pointer value which is guaranteed not to be a valid address of an object in memory |
SEEK_CUR | An integer which may be passed to the fseek() function to request positioning relative to the current file position |
SEEK_END | An integer which may be passed to the fseek() function to request positioning relative to the end of the file |
SEEK_SET | An integer which may be passed to the fseek() function to request positioning relative to the beginning of the file |
TMP_MAX | The maximum number of unique filenames generable by the tmpnam() function; will be at least 25 |
Variables
Variables defined in the stdio.h
header include:
Name | Notes |
---|---|
stdin | A pointer to a FILE which refers to the standard input stream, usually a keyboard. |
stdout | A pointer to a FILE which refers to the standard output stream, usually a display terminal. |
stderr | A pointer to a FILE which refers to the standard error stream, often a display terminal. |
Member types
Data types defined in the stdio.h
header include:
-
FILE
- also known as a file handle, this is an opaque type containing the information about a file or text stream needed to perform input or output operations on it, including:- a file descriptor
- the current stream position
- an end-of-file indicator
- an error indicator
- a pointer to the stream's buffer, if applicable
-
fpos_t
- a non-array type capable of uniquely identifying the position of every byte in a file. -
size_t
- an unsigned integer type which is the type of the result of thesizeof
operator.
Example
The following C program opens a binary file called myfile, reads five bytes from it, and then closes the file.
#include <stdio.h> #include <stdlib.h> int main(void) { char buffer[5] = {0}; /* Initialized to zeroes */ int i; FILE *fp = fopen("myfile", "rb"); if (fp == NULL) { perror("Failed to open file \"myfile\""); return EXIT_FAILURE; } /* Be sure to never read more than five characters */ for (i = 0; i < 5; i++) { int rc = getc(fp); if (rc == EOF) { fputs("An error occurred while reading the file.\n", stderr); return EXIT_FAILURE; } buffer[i] = rc; } fclose(fp); printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]); return EXIT_SUCCESS; }
See also
References
- ↑ ISO/IEC 9899:1999 specification. p. 274, § 7.19.
- ↑ Kernighan, Brian; Pike, Rob (1984). The UNIX Programming Environment. Englewood Cliffs: Prentice Hall. p. 200.
- ↑ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (Technical report). CSTR. Bell Labs. 139.
External links
The Wikibook C Programming has a page on the topic of: C Programming/C Reference |
|