C file input/output

This is an old revision of this page, as edited by BL~enwiki (talk | contribs) at 21:45, 20 April 2004. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In computer programming, the fopen, with related functions fdopen and freopen, is one of the basic functions in the C programming language. They return a stream attached to the specified file from which reading and writing can be done. Because it is so popular, many script languages derived from C tend to provide the same function with the same or similar functionality. It is considered higher-level than the open system call of UNIX operating systems.

They are defined as.

FILE * fopen(const char *path, const char *mode);
FILE * fdopen(int fildes, const char *mode);
FILE * freopen(const char *path, const char *mode, FILE * restrict stream);

The fdopen function is not standard in C89 or C99, but is an extension used in POSIX environments and imitated elsewhere.

The mode parameter is a string that begins with one of the following sequences:

r          Open a text file for reading
w          Truncate file to zero length or create text file for writing
a          Append: open or create text file for writing at end-of-file
rb         Open a binary file for reading
wb         Truncate file to zero length or create binary file for writing
ab         Append: open or create binary file for writing at end-of-file
r+         Open text file for update (reading and writing)
w+         Truncate file to zero length or create text file for update
a+         Append: open or create text file for update, writing at end-of-file
r+b or rb+ Open binary file for update (reading and writing)
w+b or wb+ Truncate file to zero length or create binary file for update
a+b or ab+ Append: open or create binary file for update, writing at end-of-file

The C standard gives two kinds of files: text files and binary files, although operating systems may or may not distinguish between the two. A text file is a file consisting of text arranged in lines with some sort of distinguishing end-of-line character or sequence (in Unix, a bare linefeed character; in the Macintosh OS, a bare carriage return; on MS-DOS and Microsoft Windows, a carriage return followed by a linefeed). When bytes are read in from a text file, an end-of-line sequence is usually mapped to a linefeed for ease in processing. When a text file is written to, a bare linefeed is mapped to the OS-specific end-of-line character sequence before writing. A binary file is a file where bytes are read in "raw", and delivered "raw", without any kind of mapping.

A conventient way to find the length of a file in C is:

FILE *f = fopen("filename", "rb"); fseek(f, 0, SEEK_END); length = tell(f); rewind(f);