unix管道的接近程度如何? (pclose()的fclose())?

时间:2011-04-05 07:04:48

标签: c++ unix file posix pipe

如果我以这种方式在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))

2 个答案:

答案 0 :(得分:4)

fdopen会返回FILE*,因此您应该fclose它。这也将关闭底层文件描述符。

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

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

答案 1 :(得分:1)

你应该使用fclose(pipe_read)。

close()关闭内核中的文件描述符。这还不够,因为文件指针不是免费的。所以你应该在pipe_read上使用fclose(),它也会关闭文件描述符。