我想通過套接字重定向我的stdin,stdout和stderr。等效於C中的windows套接字dup2
此代碼在Linux上工作:
dup2(socket, 0);
dup2(socket, 1);
dup2(socket, 2);
但Windows因爲套接字沒有描述符。
如何在Windows中執行此操作?
我想通過套接字重定向我的stdin,stdout和stderr。等效於C中的windows套接字dup2
此代碼在Linux上工作:
dup2(socket, 0);
dup2(socket, 1);
dup2(socket, 2);
但Windows因爲套接字沒有描述符。
如何在Windows中執行此操作?
在Windows上,Socket API的返回值是SOCKET
,它不是文件描述符(或者必須是一個小的非負整數)。但是,它可以在某些方面用作文件句柄,according to MSDN。特別是,您可以使用ReadFile()
和WriteFile()
。
您可以嘗試使用MS庫函數_open_osfhandle()
將OS級文件句柄轉換爲C樣式文件描述符。這適用於常規文件,但可能會或可能無法在SOCKET
上運行。一旦你有了這個文件描述符,你可以將它傳遞給_dup2()
,其中_fileno(stderr)
作爲第二個參數。一定要關閉這個描述符_close()
,這也將關閉原來的句柄。
「它不工作」不是一個sifficient **特定的**問題描述。閱讀[問],遵循建議並提供[mcve]。 – Olaf
@Olaf它不工作,因爲沒有理由它應該工作。我認爲他/她的意思是「在Windows上有什麼等效的功能?」,而不是「我試過這個,發現了一個問題。」 – immibis
@immibis:沒有所需的信息,我們怎麼知道?我不知道某人認爲/意味着什麼。 – Olaf