简体   繁体   中英

How to fdopen as open with the same mode and flags?

I would like to have a FILE* type to use fprintf . I need to use fdopen to get a FILE* instead of open that returns an int . But can we do the same with fdopen and open ? (I never used fdopen )

I would like to do a fdopen that does the same as :

open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);

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.

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:

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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM