【问题标题】:How close pipe handle in unix? (fclose() of pclose())?在 unix 中如何关闭管道处理? (pclose()的fclose())?
【发布时间】:2011-04-05 07:04:47
【问题描述】:

如果我以这种方式在 unix 中创建管道:

int fds[] = {0, 0};
pipe(fds);

然后将FILE *fds[0]变成这样:

FILE *pipe_read = fdopen(fds[0], "rt");

那我应该如何关闭这个文件(pipe_read)?

  1. fclose(pipe_read)
  2. pclose(pipe_read)
  3. close(fileno(pipe_read))

【问题讨论】:

  • 下次:man popen 给你第 3 行的信息

标签: c++ unix file posix pipe


【解决方案1】:

fdopen 返回一个FILE* 所以你应该fclose 它。这也将关闭底层文件描述符。

pclose 调用用于关闭使用popen 创建的句柄,该函数用于运行命令并通过管道连接到它。

close 调用将关闭底层文件描述符,但不幸的是,在文件句柄有机会刷新其数据之前 - 换句话说,您可能会丢失数据。

【讨论】:

    【解决方案2】:

    你应该使用 fclose(pipe_read)。

    close() 关闭内核中的文件描述符。这还不够,因为文件指针不是空闲的。因此,您应该在 pipe_read 上使用 fclose(),它还将负责关闭文件描述符。

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2013-08-20
      • 2012-12-06
      • 1970-01-01
      • 2017-12-31
      • 2018-07-07
      相关资源
      最近更新 更多