[英]What is the simplest way to execute arbitrary process with stdin, stdout forwarded to a socket?
我對以下兩種情況感興趣:
歡迎回答Linux,Windows和OSX。
Linux / OSX(實際上是POSIX),編程(具有POSIX調用的任何語言),一般方案:
fork()
close(0)
, close(1)
(不是必須的, dup2
也會將其關閉...但是為了清楚起見添加了它) dup2(socket, 0)
, dup2(socket, 1)
exec()
Shell:使用nc
。 我的其他答案中的示例: https : //stackoverflow.com/questions/1269400/is-this-a-fair-question-to-ask-in-a-software-engineering-interview-phase-1/1269577#1269577
我也想知道xinetd在這種情況下是否沒有幫助。 它使您可以編寫一個程序,該程序僅從stdin讀取並寫入stdout,然后xinetd處理監聽某些套接字,分離出必要的I / O套接字並將它們附加到您的進程中。
對於UNIX,可以從外殼程序訪問: http : //www.askdavetaylor.com/how_do_i_reredirectdirect_stdin_in_a_unix_or_linux_shell_script.html
有關更多常規信息: http : //www.mathinfo.u-picardie.fr/asch/f/MeCS/courseware/users/help/general/unix/redirection.html
對於Windows,連接至套接字: http : //www.unix.com/high-level-programming/79439-redirect-stdin-out-sockets.html
這是有關unix重定向的說明: http : //www.rtems.com/ml/rtems-users/2007/october/msg00063.html
現在,此程序將僅重定向程序中的任何內容到stdin / out / err。
我喜歡最后一個鏈接在程序退出之前也可以還原stdin / out / err的事實。 如果您進行任何此類更改,則記住要做好恢復。
可以使用多種方法來進行操作,例如,可以使用管道並將管道轉到套接字或文件中,以便將stdin / out重定向到管道。 如果您希望能夠切換最終目的地的位置,或者在此過程中要進行一些處理,因為每個管道都可以進行某些處理,則這很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.