与C中的Windows套接字相同的dup2

时间:2016-11-28 21:46:12

标签: c windows sockets redirect dup2

我想通过套接字重定向我的stdin,stdout和stderr。

此代码适用于Linux:

dup2(socket, 0);
dup2(socket, 1);
dup2(socket, 2);

但不在Windows上,因为套接字不是描述符。

如何在Windows中执行此操作?

1 个答案:

答案 0 :(得分:0)

在Windows上,Socket API的返回值是SOCKET,它不是文件描述符(或者必须是小的非负整数)。但是,它可以在某些方面用作文件句柄according to MSDN。特别是,您可以将其与ReadFile()WriteFile()一起使用。

您可以尝试使用MS库函数_open_osfhandle()将操作系统级文件句柄转换为C风格的文件描述符。这适用于常规文件,但可能会或可能不适用于SOCKET。获得该文件描述符后,可以将其传递给_dup2(),并将_fileno(stderr)作为第二个参数。请务必使用_close()关闭此描述符,这也将关闭原始句柄。