5

我想有一种FILE*可以使用的类型fprintf。我需要使用fdopen来获取 aFILE*而不是open返回一个int. 但是我们可以用fdopenand做同样的事情open吗?(我没用过fdopen

我想做一个fdopen与以下内容相同的事情:

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

3 回答 3

9

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

只是open您的文件获取描述符,然后fdopen是该描述符。

fdopenread只需创建一个用户空间缓冲流,采用支持andwrite操作的任何类型的描述符。

于 2013-02-27T11:16:31.277 回答
8

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

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

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;
}

注意:

于 2013-02-27T11:15:33.683 回答
1

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

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

考虑一下,这fopen是使用标准库调用而不是系统调用(打开)。所以你没有那么多选项(比如指定访问控制值)。

请参阅手册页

于 2013-02-27T11:18:48.263 回答