我想通过套接字重定向我的stdin,stdout和stderr。
此代码适用于Linux:
dup2(socket, 0);
dup2(socket, 1);
dup2(socket, 2);
但不在Windows上,因为套接字不是描述符。
如何在Windows中执行此操作?
答案 0 :(得分:0)
在Windows上,Socket API的返回值是SOCKET
,它不是文件描述符(或者必须是小的非负整数)。但是,它可以在某些方面用作文件句柄according to MSDN。特别是,您可以将其与ReadFile()
和WriteFile()
一起使用。
您可以尝试使用MS库函数_open_osfhandle()
将操作系统级文件句柄转换为C风格的文件描述符。这适用于常规文件,但可能会或可能不适用于SOCKET
。获得该文件描述符后,可以将其传递给_dup2()
,并将_fileno(stderr)
作为第二个参数。请务必使用_close()
关闭此描述符,这也将关闭原始句柄。