Files and Streams
Files and Streams
Text and Binary Streams | Byte and Wide Streams | Controlling Streams | Stream States****
A program communicates with the target environment by reading and writing files (ordered sequences of bytes). A file can be, for example, a data set that you can read and write repeatedly (such as a disk file), a stream of bytes generated by a program (such as a pipeline), or a stream of bytes received from or sent to a peripheral device (such as the keyboard or display). The latter two are interactive files. Files are typically the principal means by which to interact with a program.
You manipulate all these kinds of files in much the same way -- by calling library functions. You include the standard header <stdio.h>
to declare most of these functions.
Before you can perform many of the operations on a file, the file must be opened. Opening a file associates it with a stream, a data structure within the Standard C library that glosses over many differences among files of various kinds. The library maintains the state of each stream in an object of type FILE
.
The target environment opens three files prior to program startup. You can open a file by calling the library function fopen
with two arguments. The first argument is a filename, a multibyte string that the target environment uses to identify which file you want to read or write. The second argument is a C string that specifies:
- Whether you intend to read data from the file or write data to it, or both.
- Whether you intend to generate new contents for the file (or create a file if it did not previously exist) or leave the existing contents in place.
- Whether writes to a file can alter existing contents or should only append bytes at the end of the file.
- Whether you want to manipulate a text stream or a binary stream.
Once the file is successfully opened, you can determine whether the stream is byte-oriented (a byte stream) or wide-oriented (a wide stream). Wide-oriented streams are supported only with Amendment 1. A stream is initially unbound. Calling certain functions to operate on the stream makes it byte oriented, while certain other functions make it wide oriented. Once established, a stream maintains its orientation until it is closed by a call to fclose
or freopen
.