如何关闭Windows中的管道句柄? (_pclose() 的 fclose())?

发布于 2024-10-31 01:39:43 字数 508 浏览 2 评论 0原文

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

CreatePipe(hRead, hWrite, &sec_atr, NULL)

然后以这种方式从 hRead 生成 FILE *

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)))

If I create pipe in windows this way:

CreatePipe(hRead, hWrite, &sec_atr, NULL)

Then make FILE * from hRead this way:

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

Then how should I close this file (pipe_read)?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秋风の叶未落 2024-11-07 01:39:43

此处的示例中,使用 f关闭fclose 的文档进一步阐明:

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

From the example here, use fclose. The documentation for fclose further clarifies with:

When these functions are used to close a stream, the underlying file descriptor and OS file handle (or socket) are closed, as well as the stream. Thus, if the file was originally opened as a file handle or file descriptor and is closed with fclose, do not also call _close to close the file descriptor; do not call the Win32 function CloseHandle to close the file handle; and do not call closesocket to also close the socket.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文