如何使用相同的模式和标志打开fdopen



我想有一个FILE*类型使用fprintf。我需要使用fdopen来获得FILE*,而不是返回intopen。但我们可以做同样的fdopenopen吗?(我从未使用过fdopen)

我想做一个fdopen,做相同的:

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

fdopen接受一个文件描述符,这个文件描述符之前可以由open返回,所以这不是问题。

只要open你的文件得到描述符,然后fdopen那个描述符。

fdopen只是创建一个用户空间缓冲流,接受任何支持readwrite操作的描述符。

fdopen()使用文件描述符指向文件指针:

fdopen()函数将一个流与一个文件描述符关联起来。文件描述符从open()dup()creat()pipe()中获得,它们打开文件,但不返回指向FILE结构流的指针。流是几乎所有studio库例程的必要输入。

FILE* fp = fdopen(fd, "w");

当你想使用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;
}

注意:

  • 流的模式必须与文件描述符的模式兼容。
  • 当流通过fclose()关闭时,fd也被关闭。ref: fclose()函数对与流所指向的流相关联的文件描述符执行close()操作。

如果您之前没有为您的文件获取一个文件描述符,不如使用fopen

FILE* file = fopen("pathtoyourfile", "w+");

考虑fopen使用的是stand-library调用,而不是system-calls (open)。所以你没有那么多的选项(比如指定access-control-values)。

参见手册页。

相关内容

  • 没有找到相关文章

最新更新