How to fdopen as open with the same mode and flags?
Solution 1
fdopen
takes a file descriptor that could be previously returned by open
, so that is not a problem.
Just open
your file getting the descriptor, and then fdopen
that descriptor.
fdopen
simply creates a userspace-buffered stream, taking any kind of descriptor that supports the read
and write
operations.
Solution 2
fdopen()
use file descriptor to file pointer:
The fdopen()
function associates a stream with a file descriptor. File descriptors are obtained from open()
, dup()
, creat()
, or pipe()
, which open files but do not return pointers to a FILE
structure stream. Streams are necessary input for almost all of the stdio library routines.
FILE* fp = fdopen(fd, "w");
this example code may help you more as you want to use fprintf()
:
int main(){
int fd;
FILE *fp;
fd = open("my_file",O_WRONLY | O_CREAT | O_TRUNC);
if(fd<0){
printf("open call fail");
return -1;
}
fp=fdopen(fd,"w");
fprintf(fp,"we got file pointer fp bu using File descriptor fd");
fclose(fp);
return 0;
}
Notice:
- The mode of the stream must be compatible with the mode of the file descriptor.
- When the stream is closed via
fclose()
, fd is closed also. ref: Thefclose()
function performs aclose()
on the file descriptor that is associated with the stream pointed to by stream.
Solution 3
If you don't have previously acquired a file-descriptor for your file, rather use fopen
.
FILE* file = fopen("pathtoyourfile", "w+");
Consider, that fopen
is using the stand-library-calls and not the system-calls (open). So you don't have that many options (like specifying the access-control-values).
See the man-page.
Elfayer
Updated on April 13, 2020Comments
-
Elfayer about 4 years
I would like to have a
FILE*
type to usefprintf
. I need to usefdopen
to get aFILE*
instead ofopen
that returns anint
. But can we do the same withfdopen
andopen
? (I never usedfdopen
)I would like to do a
fdopen
that does the same as :open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);
-
Jite about 11 yearsDon't forget to that the modes to
fdopen
must be compatible with the file descriptor ones. -
Jite about 11 yearsYou should not close the file descriptor after having used
fdopen
on it and thenfclose
. Thefd
is not dup'ed and callingfclose
will close it. -
Jite about 11 yearsQuoting man page:
The file descriptor is not dup'ed, and will be closed when the stream created by fdopen() is closed.
Also see stackoverflow.com/questions/8417123/… -
Elfayer about 11 yearsThat doesn't write anything in the file.
-
Grijesh Chauhan about 11 years@Elfayer It should work, Try again also here is one more example