我想有一种FILE*可以使用的类型fprintf。我需要使用fdopen来获取 aFILE*而不是open返回一个int. 但是我们可以用fdopenand做同样的事情open吗?(我没用过fdopen)
我想做一个fdopen与以下内容相同的事情:
open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);
fdopen接受一个可能由 先前返回的文件描述符open,所以这不是问题。
只是open您的文件获取描述符,然后fdopen是该描述符。
fdopenread只需创建一个用户空间缓冲流,采用支持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是使用标准库调用而不是系统调用(打开)。所以你没有那么多选项(比如指定访问控制值)。
请参阅手册页。