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);