6.18.18 fopen Function
Opens a file.
Include
<stdio.h>
Prototype
FILE * fopen(const char * filename, const char * mode);
Arguments
filename
- name of the file
mode
- type of access permitted
Return Value
Returns a pointer to the open stream. If the function fails, a null pointer is returned.
Remarks
The following are types of file access:
r
| Opens an existing text file for reading. |
w
| Opens an empty text file for writing (an existing file is overwritten). |
a
| Opens a text file for appending (a file is created if it doesn’t exist). |
rb
| Opens an existing binary file for reading. |
wb
| Opens an empty binary file for writing (an existing file is overwritten). |
ab
| Opens a binary file for appending (a file is created if it doesn’t exist). |
r+
| Opens an existing text file for reading and writing. |
w+
| Opens an empty text file for reading and writing (an existing file is overwritten). |
a+
| Opens a text file for reading and appending (a file is created if it doesn’t exist). |
r+b or rb+ | Opens an existing binary file for reading and writing. |
w+b or wb+
| Opens an empty binary file for reading and writing (an existing file is overwritten.) |
a+b or ab+ | Opens a binary file for reading and appending (a file is created if it doesn’t exist). |
This function requires a heap.
Example
See the notes at the beginning of this chapter or section for
information on using printf()
or scanf()
(and other functions reading and writing the stdin
or
stdout
streams) in the example code.
#include <stdio.h>
int main(void)
{
FILE *myfile1, *myfile2;
int y;
if ((myfile1 = fopen("afile1", "r")) == NULL)
printf("Cannot open afile1\n");
else
{
printf("afile1 was opened\n");
y = fclose(myfile1);
if (y == EOF)
printf("afile1 was not closed\n");
else
printf("afile1 was closed\n");
}
if ((myfile1 = fopen("afile1", "w+")) == NULL)
printf("Second try, cannot open afile1\n");
else
{
printf("Second try, afile1 was opened\n");
y = fclose(myfile1);
if (y == EOF)
printf("afile1 was not closed\n");
else
printf("afile1 was closed\n");
}
if ((myfile2 = fopen("afile2", "a+")) == NULL)
printf("Cannot open afile2\n");
else
{
printf("afile2 was opened\n");
y = fclose(myfile2);
if (y == EOF)
printf("afile2 was not closed\n");
else
printf("afile2 was closed\n");
}
}
Example Output
Cannot open afile1
Second try, afile1 was opened
afile1 was closed
afile2 was opened
afile2 was closed
Example Explanation
afile1
must exist before it can be opened for reading
(r
) or the fopen
function will fail.
If the fopen
function opens a file for writing
(w+
) it does not have to exist, it will be created and then opened.
If the file does exist, it cannot be overwritten and will be appended.