Associate a stream with a file descriptor.
Include
<stdio.h>
Prototype
FILE *fdopen(int fildes, const char
*mode);
Arguments
fildes |
file descriptor |
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. |
a |
Opens a text file for appending. |
rb |
Opens an existing binary file for reading. |
wb |
Opens an empty binary file for writing. |
ab |
Opens a binary file for appending. |
r+ |
Opens an existing text file for reading and writing. |
w+ |
Opens an empty text file for reading and writing. |
a+ |
Opens a text file for reading and appending. |
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. |
a+b or ab+ |
Opens a binary file for reading and appending. |
This function requires a heap.
Example
#include <stdio.h> /* for fdopen, fclose, printf, FILE, NULL, EOF */
int main(void)
{
FILE *myfile1, *myfile2;
int y;
if ((myfile1 = fdopen("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 = fdopen("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 = fdopen("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
Cannot open afile2
Example Explanation
afile1
must exist before it can be
opened for reading (r
) or the
fdopen
function will fail.
If the fdopen
function opens a file for
writing (w+
) that doesn’t exist, it will be created
and then opened. If the file does exist, it cannot be overwritten
and will be appended.
If the fdopen
function attempts to
append a file (a+
) that doesn’t exist, it will NOT
be created and fdopen
will fail. If the file does
exist, it will be opened for appending.