2016-11-28 12 views
0

我想通過套接字重定向我的stdin,stdout和stderr。等效於C中的windows套接字dup2

此代碼在Linux上工作:

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

但Windows因爲套接字沒有描述符。

如何在Windows中執行此操作?

+1

「它不工作」不是一個sifficient **特定的**問題描述。閱讀[問],遵循建議並提供[mcve]。 – Olaf

+0

@Olaf它不工作,因爲沒有理由它應該工作。我認爲他/她的意思是「在Windows上有什麼等效的功能?」,而不是「我試過這個,發現了一個問題。」 – immibis

+0

@immibis:沒有所需的信息,我們怎麼知道?我不知道某人認爲/意味着什麼。 – Olaf

回答

0

在Windows上,Socket API的返回值是SOCKET,它不是文件描述符(或者必須是一個小的非負整數)。但是,它可以在某些方面用作文件句柄,according to MSDN。特別是,您可以使用ReadFile()WriteFile()

您可以嘗試使用MS庫函數_open_osfhandle()將OS級文件句柄轉換爲C樣式文件描述符。這適用於常規文件,但可能會或可能無法在SOCKET上運行。一旦你有了這個文件描述符,你可以將它傳遞給_dup2(),其中_fileno(stderr)作爲第二個參數。一定要關閉這個描述符_close(),這也將關閉原來的句柄。

+0

謝謝,但我嘗試了這個http://pastebin.com/utXNQnym,他不工作 – Switch

+0

記住給'_dup2()'和'close()'描述符('sck')而不是套接字句柄(' sock')。另外,不要讓兩個變量同名。請檢查您的錯誤代碼?它仍然可能無法工作。 – Davislor

+0

哦,是的,我修好了。沒有錯誤代碼,但我的消息不發送。它沒有出現在控制檯或插座(我用wireshark看到它) – Switch