C file input/output
C standard library (libc) |
---|
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]
[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 the Unix operating system, 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.
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 | |
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 string 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
| |
gets
|
— | reads a byte string from stdin | |
putchar
|
putwchar
|
writes a byte/wchar_t to stdout
| |
puts
|
— | 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 | |
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 | ||
perror
|
displays a character string corresponding of the current error to stderr | ||
Operations on files |
remove
|
erases a file | |
rename
|
renames a file | ||
tmpfile
|
returns a pointer to a temporary file | ||
tmpnam
|
returns a unique filename | ||
Functions | strcmp
|
compares two c strings. |
Operators
Name | Notes |
---|---|
sizeof |
sizeof operator returns the number of bytes to be reserved for a variable or a data type. |
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 8 |
_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
- a structure 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, rc;
FILE *fp = fopen("myfile", "rb");
if (fp == NULL) {
perror("Failed to open file \"myfile\"");
return EXIT_FAILURE;
}
for (i = 0; (rc = getc(fp)) != EOF && i < 5; buffer[i++] = rc) { }
fclose(fp);
if (i == 5) {
puts("The bytes read were...");
printf("%x %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);
}
else
fputs("An error occurred while reading the file.\n", stderr);
return EXIT_SUCCESS;
}
References
- ^ ISO/IEC 9899:1999 specification (PDF). p. 274, § 7.19.
- ^ Kernighan, Brian (1984). The UNIX Programming Environment. Englewood Cliffs: Prentice Hall. p. 200.
{{cite book}}
: Unknown parameter|coauthors=
ignored (|author=
suggested) (help) - ^ [Coding Programmer Page C / C++ Reference].
External links