窗户中的管道把手有多近? (_pclose()的fclose())?

时间:2011-04-05 06:56:30

标签: c++ c winapi file pipe

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

CreatePipe(hRead, hWrite, &sec_atr, NULL)

然后以这种方式从FILE *制作hRead

int fd = _open_osfhandle((intptr_t)hRead, _O_RDONLY|_O_TEXT);
FILE *pipe_read = _fdopen(fd, "rt");

然后我应该如何关闭此文件(pipe_read)?

  1. fclose(pipe_read)
  2. _pclose(pipe_read)
  3. CloseHandle((HANDLE)_get_osfhandle(fileno(pipe_read)))

1 个答案:

答案 0 :(得分:4)

从示例here开始,使用fclosefclose的文档进一步说明:

  

当这些函数用于关闭流时,底层文件描述符和OS文件句柄(或套接字)以及流都将被关闭。因此,如果文件最初作为文件句柄或文件描述符打开并且使用fclose关闭,则不要调用_close来关闭文件描述符;不要调用Win32函数CloseHandle来关闭文件句柄;并且不要调用closesocket来关闭套接字。