- C file input/output
-
C Standard Library - Data types
- Character classification
- Strings
- Mathematics
- File input/output
- Date/time
- Localization
- Memory allocation
- Program control
- 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]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
Overview of functions
Most of the C file input/output functions are defined in
stdio.h(cstdioheader in C++).- File access
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/O
- Direct input/output
- Unformatted input/output
-
- Narrow character
fgetc,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 stream
-
- Wide character
fgetwc,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 stream
- Formatted input/output
-
- Narrow character
scanf,fscanf,sscanf- reads formatted input from stdin, a file stream or a buffervscanf,vfscanf,wsscanf- reads formatted input from stdin, a file stream or a buffer using variable argument listprintf,fprintf,sprintf,snprintfprints 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 list
-
- Wide character
wscanf,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 list
- File positioning
ftell- 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 file
- Error handling
clearerr- clears errorsfeof- checks for the end-of-fileferror- checks for a file errorperror- displays a character string corresponding of the current error to stderr
- Operations on files
remove- erases a filerename- renames a filetmpfile- returns a pointer to a temporary filetmpnam- returns a unique filename
Constants
Constants defined in the
stdio.hheader include:Name Notes EOFa negative integer of type intused to indicate end-of-file conditionsBUFSIZan integer which is the size of the buffer used by the setbuf()functionFILENAME_MAXthe size of a chararray which is large enough to store the name of any file that can be openedFOPEN_MAXthe number of files that may be open simultaneously; will be at least 8 _IOFBFan 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_IOLBFan 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_IONBFan 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 streamL_tmpnamthe size of a chararray which is large enough to store a temporary filename generated by thetmpnam()functionNULLa 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_CURan integer which may be passed to the fseek()function to request positioning relative to the current file positionSEEK_ENDan integer which may be passed to the fseek()function to request positioning relative to the end of the fileSEEK_SETan integer which may be passed to the fseek()function to request positioning relative to the beginning of the fileTMP_MAXthe maximum number of unique filenames generable by the tmpnam()function; will be at least 25Variables
Variables defined in the
stdio.hheader include:Name Notes stdina pointer to a FILEwhich refers to the standard input stream, usually a keyboard.stdouta pointer to a FILEwhich refers to the standard output stream, usually a display terminal.stderra pointer to a FILEwhich refers to the standard error stream, often a display terminal.Member types
Data types defined in the
stdio.hheader 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 thesizeofoperator.
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("There was an error reading the file.\n", stderr); return EXIT_SUCCESS; }
References
- ^ ISO/IEC 9899:1999 specification. p. 274, § 7.19. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf.
- ^ Kernighan, Brian; Rob Pike (1984). The UNIX Programming Environment. Englewood Cliffs: Prentice Hall. p. 200.
External links
Categories:
Wikimedia Foundation. 2010.