C File I/O

There are types and functions in the library stdio.h that are used for file I/O. Reading from or writing to a file in C requires 3 basic steps:

  • Open the file.
  • Do all the reading or writing.
  • Close the file.

For files you want to read or write, you need a file pointer:

FILE *fp;

FILE is some kind of structure that contains all the information necessary to control the file.

  • Open File -- fopen(const char filename, const char mode)

fopen(-) will initialize an object of the type FILE. The parameter "filename" is file name and "mode" is s a string representing how you want to open the file. When success, fopen() returns a FILE * that can then be used to access the file, otherwise, it returns NULL. "mode" can have the following values.

Mode Description
r Open an existing text file for reading
w Open a text file for writing. If it does not exist, then create it.
a Open a text file for writing in appending mode. If it does not exist, then create it.
r+ Open a text file for both reading and writing
w+ Open a text file for both reading and writing. If file exists, first truncate it to zero. If file does not exist, create it.
a+ Open a text file for both reading and writing. If file does not exist, create it. The reading starts from the beginning but writing can only be appended

Note For handling binary files, you need to use the following access modes.

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
  • Close File -- fclose(FILE *fp )

When done with a file, it must be closed using the function fclose(-). This function actually flushes any data still pending in the buffer to the file, closes the file, and releases any memory used for the file.
Closing a file is very important, if you forget to close an output file then whatever is still in the buffer may not be written out.

The fclose(-) function returns zero on success, or EOF if there is an error in closing the file.

openfile.c is an example about how to use fopen and fclose.

/*openfile.c*/
#include <stdio.h>
#include <stdlib.h>
int main(void){
    FILE * fp;
    fp = fopen("testfile", "r");
    if (fp == NULL) {
        printf("Can't open file!\n");
        exit(EXIT_FAILURE);
    }
    printf("Open file successfully!\n");
    fclose(fp);
    return 0;
}