混合 fdopen() 和 open() -> 错误的文件描述符

2024-01-09

int source = open("hi", O_CREAT | O_RDONLY);
int dest = open("resultfile", O_CREAT | O_RDWR | O_TRUNC);

FILE* source1 = fdopen(source, "r");  
FILE* dest1 = fdopen(dest, "w+");

// outside of a testcase I would write something into 'resultfile' here

close(source);
close(dest);
fclose(source1);
fclose(dest1);

int sourcef = open("resultfile", O_RDONLY);
printf(strerror(errno)); // <--- Bad file descriptor

我不明白为什么?如何成功地将基于流的 IO 与 open() 混合?

我正在使用的库只接受整数 fd (并且该库在内部负责关闭它,大概是使用 close() ),但我仍然需要使用该文件,而且我不明白这是怎么回事无需 f() 调用(如 fread()、ftell() 等)即可正确实现


fclose calls close为你。如果你想在调用后保留 fdfclose, dup首先是FD。

int fd = open(...);
int fd2 = dup(fd);
FILE *fp = fdopen(fd2);
fclose(fp);
// fd is still valid.

您的示例中的错误文件描述符错误消息一直存在fclose(dest1) call.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

混合 fdopen() 和 open() -> 错误的文件描述符 的相关文章

随机推荐