我希望使用FILE*
类型来使用fprintf
。
我需要使用fdopen
来获取FILE*
而不是open
来返回int
。
但我们可以对fdopen
和open
执行相同的操作吗? (我从未使用fdopen
)
我想做fdopen
,其作用与:
open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);
答案 0 :(得分:9)
fdopen
获取open
之前可能返回的文件描述符,因此这不是问题。
只需open
您的文件获取描述符,然后fdopen
该描述符。
fdopen
只是创建一个用户空间缓冲的流,采用支持read
和write
操作的任何类型的描述符。
答案 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;
}
注意:
fclose()
关闭流时,fd也会关闭。
参考:The fclose()
function performs a close()
on the file descriptor that is associated with the stream pointed to by stream. 答案 2 :(得分:1)
如果您之前没有为您的文件获取文件描述符,请使用fopen
。
FILE* file = fopen("pathtoyourfile", "w+");
请注意,fopen
正在使用stand-library-calls而不是system-calls(open)。所以你没有那么多的选择(比如指定访问控制值)。
请参阅man-page。