有没有办法使文件描述符在Windows中非阻塞?

Mih*_*yan 5 c winapi file

我想将我的代码从linux移植到windows。它是这样的:

void SetNonBlocking( int filehandle )
{
    int fhFlags;

    fhFlags = fcntl(filehandle,F_GETFL);
    if (fhFlags < 0)
    {
        perror("fcntl(F_GETFL)");
        exit(1);
    }

    fhFlags |= O_NONBLOCK;
    if (fcntl(filehandle,F_SETFL,fhFlags) < 0)
    {   
        perror("fcntl(F_SETFL)");
        exit(1);
    } 

    return;
}
Run Code Online (Sandbox Code Playgroud)

现在我想在 Windows 中也有同样的东西。有任何想法吗?实际上,我的文件句柄是通过 WinApi 方法创建的管道的读取端CreatePipe

Vij*_*hew 0

Windows API 函数CreateNamedPipe有一个选项可以使句柄成为非阻塞的。(参见 MSDN)。另请参阅有关同步和重叠 I/O的 MSDN 文章。顺便说一句,您可以使用MinGWCygwin在 Windows 上直接编译 POSIX 兼容代码,从而避免移植的麻烦。

  • 1. msdn的链接很有用,但并不能解决我所有的问题。有解释如何以非阻塞模式读取或写入文件的句柄,但没有解释如何使文件的句柄非阻塞。如果 HANDLE 是非阻塞的,我可以从中创建 FILE* ,然后通过 fgets、fscanf 读取...并且此操作不会阻塞程序,但如果只有读写是非阻塞的,那么它就不太灵活,我有使用 WinApi 读写方法进行非阻塞操作。2.Cygwin和MinGW没有实现posix的全部功能。我的问题是来自未实施的部分。 (2认同)