我想有一种FILE*
可以使用的类型fprintf
。我需要使用fdopen
来获取 aFILE*
而不是open
返回一个int
. 但是我们可以用fdopen
and做同样的事情open
吗?(我没用过fdopen
)
我想做一个fdopen
与以下内容相同的事情:
open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);
fdopen
接受一个可能由 先前返回的文件描述符open
,所以这不是问题。
只是open
您的文件获取描述符,然后fdopen
是该描述符。
fdopen
read
只需创建一个用户空间缓冲流,采用支持andwrite
操作的任何类型的描述符。
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;
}
注意:
fclose()
, fd 也关闭。ref:该fclose()
函数close()
对与stream指向的流相关联的文件描述符执行a。 如果您之前没有为您的文件获取文件描述符,请使用fopen
.
FILE* file = fopen("pathtoyourfile", "w+");
考虑一下,这fopen
是使用标准库调用而不是系统调用(打开)。所以你没有那么多选项(比如指定访问控制值)。
请参阅手册页。