C Standard Library |
---|
|
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]
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.
Contents |
Most of the C file input/output functions are defined in stdio.h
(cstdio
header in C++).
fopen
- opens a filefreopen
- opens a different file with an existing streamfflush
- synchronizes an output stream with the actual filefclose
- closes a filesetbuf
- sets the buffer for a file streamsetvbuf
- sets the buffer and its size for a file streamfwide
- switches a file stream between wide character I/O and narrow character I/Ofgetc
, getc
- reads a character from a file streamfgets
- reads a character string from a file streamfputc
, putc
- writes a character to a file streamfputs
- writes a character string to a file streamgetchar
- reads a character from stdingets
- reads a character string from stdinputchar
- writes a character to stdoutputs
- writes a character string to stdoutungetc
- puts a character back into a file streamfgetwc
, getwc
- reads a wide character from a file streamfgetws
- reads a wide character string from a file streamfputwc
, putwc
- writes a wide character to a file streamfputws
- writes a wide character string to a file streamgetwchar
- reads a wide character from stdinputwchar
- writes a wide character to stdoutungetwc
- puts a wide character back into a file streamscanf
, fscanf
, sscanf
- reads formatted input from stdin, a file stream or a buffervscanf
, vfscanf
, vsscanf
- reads formatted input from stdin, a file stream or a buffer using variable argument listprintf
, fprintf
, sprintf
, snprintf
prints formatted output to stdout, a file stream or a buffervprintf
, vfprintf
, vsprintf
, vsnprintf
- prints formatted output to stdout, a file stream, or a buffer using variable argument listwscanf
, fwscanf
, swscanf
- reads formatted wide character input from stdin, a file stream or a buffervwscanf
, vfwscanf
, vswscanf
- reads formatted wide character input from stdin, a file stream or a buffer using variable argument listwprintf
, fwprintf
, swprintf
- prints formatted wide character output to stdout, a file stream or a buffervwprintf
, vfwprintf
, vswprintf
- prints formatted wide character output to stdout, a file sttream or a buffer using variable argument listftell
- returns the current file position indicatorfgetpos
- gets the file position indicatorfseek
- moves the file position indicator to a specific location in a filefsetpos
- moves the file position indicator to a specific location in a filerewind
- moves the file position indicator to the beginning in a fileclearerr
- clears errorsfeof
- checks for the end-of-fileferror
- checks for a file errorperror
- displays a character string corresponding of the current error to stderrremove
- erases a filerename
- renames a filetmpfile
- returns a pointer to a temporary filetmpnam
- returns a unique filenameConstants 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 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. |
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:
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 the sizeof
operator.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("There was an error reading the file.\n", stderr); return EXIT_SUCCESS; }