如果我以这种方式在unix中创建管道:
int fds[] = {0, 0};
pipe(fds);
然后以这种方式从FILE *
制作fds[0]
:
FILE *pipe_read = fdopen(fds[0], "rt");
然后我应该如何关闭此文件(pipe_read
)?
fclose(pipe_read)
pclose(pipe_read)
close(fileno(pipe_read))
答案 0 :(得分:4)
fdopen
会返回FILE*
,因此您应该fclose
它。这也将关闭底层文件描述符。
pclose
调用用于关闭使用popen
创建的句柄,close
是一个用于运行命令并使用管道连接到它的函数。
{{1}}调用将关闭基础文件描述符,但不幸的是,在文件句柄有机会刷新其数据之前 - 换句话说,您可能会丢失数据。
答案 1 :(得分:1)
你应该使用fclose(pipe_read)。
close()关闭内核中的文件描述符。这还不够,因为文件指针不是免费的。所以你应该在pipe_read上使用fclose(),它也会关闭文件描述符。