我希望有一个使用fprintf的FILE*类型。我需要使用fdopen来获取FILE*,而不是返回int的open。但是我们能用fdopen和open做同样的事情吗?(我从未使用过fdopen)
我想做一个fdopen,它的作用与以下相同:
open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);发布于 2013-02-27 19:16:31
fdopen接受一个文件描述符,该文件描述符以前可能由open返回,所以这不是问题。
只需对获取描述符的文件执行open操作,然后对该描述符执行fdopen操作。
fdopen只需创建一个用户空间缓冲的流,接受任何类型的支持read和write操作的描述符。
发布于 2013-02-27 19:15:34
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也会关闭。参考:The fclose() function performs a close() on the file descriptor that is associated with the stream pointed to by stream.发布于 2013-02-27 19:18:48
如果您以前没有为您的文件获取文件描述符,那么可以使用fopen。
FILE* file = fopen("pathtoyourfile", "w+");考虑一下,fopen使用的是标准库调用,而不是系统调用(打开)。因此,您没有太多的选项(比如指定访问控制值)。
请参阅man-page。
https://stackoverflow.com/questions/15110642
复制相似问题