想象以下代码作为线程运行:
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) 可能因各种原因而失败 - 是否有保证/何时关闭底层文件描述符或之后它仍然打开?