想象以下代码作为线程运行:
void *thread_worker(void *q) {
for (;;) {
int fd = some_queue_get(q);
FILE *writer = fdopen(fd, "w");
if (!writer) { perror("fdopen"; close(fd); continue; }
// do something with writer
if (fclose(writer) == EOF) {
perror("fclose writer");
// should fd be closed here?
close(fd);
}
}
Run Code Online (Sandbox Code Playgroud)
fclose(3) 可能因各种原因而失败 - 是否有保证/何时关闭底层文件描述符或之后它仍然打开?
man fclose也没有在我的系统上提供答案,但man 3p fclose揭示了POSIX 程序员手册 的官方版本,该版本在这个问题上更加全面:
该函数应在与流指向的流关联的文件描述符上
fclose()执行相当于 a 的操作。close()
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |