小编the*_*nny的帖子

如果 fclose() 失败,文件描述符是否仍然打开?

想象以下代码作为线程运行:

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) 可能因各种原因而失败 - 是否有保证/何时关闭底层文件描述符或之后它仍然打开?

  • 如果在冲洗失败时 fd 没有被 fclose 关闭,一个人会在没有额外关闭的情况下泄漏 fds。
  • 如果 fd 被 fclose 关闭,则额外的关闭可能会关闭由其他线程新打开的文件描述符。

c posix fclose

9
推荐指数
1
解决办法
133
查看次数

标签 统计

c ×1

fclose ×1

posix ×1