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

时间:2013-02-27 11:13:07

标签: c file-io printf fdopen

我希望使用FILE*类型来使用fprintf。 我需要使用fdopen来获取FILE*而不是open来返回int。 但我们可以对fdopenopen执行相同的操作吗? (我从未使用fdopen

我想做fdopen,其作用与:

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

3 个答案:

答案 0 :(得分:9)

fdopen获取open之前可能返回的文件描述符,因此这不是问题。

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

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

答案 1 :(得分:8)

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

fdopen()函数将流与文件描述符相关联。文件描述符来自open()dup()creat()pipe(),它们打开文件但不返回指向FILE结构流的指针。 Streams是几乎所有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;
}

注意:

答案 2 :(得分:1)

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

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

请注意,fopen正在使用stand-library-calls而不是system-calls(open)。所以你没有那么多的选择(比如指定访问控制值)。

请参阅man-page