Как закрыть ручку трубы в окнах? (fclose () из _pclose ())? - PullRequest
1 голос
/ 05 апреля 2011

Если я создаю трубу в 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 Ответ

4 голосов
/ 05 апреля 2011

Из примера здесь , используйте fclose.Документация для fclose дополнительно поясняется следующим образом:

Когда эти функции используются для закрытия потока, базовый дескриптор файла и дескриптор файла ОС (или сокета) также закрываются.как поток.Таким образом, если файл был первоначально открыт как дескриптор файла или дескриптор файла и закрыт с помощью fclose, также не вызывайте _close, чтобы закрыть дескриптор файла;не вызывайте Win32-функцию CloseHandle, чтобы закрыть дескриптор файла;и не вызывайте closesocket, чтобы также закрыть сокет.

...