unix中的管道句柄有多近?(fclose() 的 pclose())?

Mih*_*yan 1 c++ unix posix file pipe

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

int fds[] = {0, 0};
pipe(fds);
Run Code Online (Sandbox Code Playgroud)

然后,使FILE *fds[0]这种方式:

FILE *pipe_read = fdopen(fds[0], "rt");
Run Code Online (Sandbox Code Playgroud)

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

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

pax*_*blo 5

fdopen返回 aFILE*所以你应该fclose这样做。这也将关闭底层文件描述符。

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

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