簡體   English   中英

使用stdin,stdout轉發到套接字的執行任意進程的最簡單方法是什么?

[英]What is the simplest way to execute arbitrary process with stdin, stdout forwarded to a socket?

我對以下兩種情況感興趣:

  • 如何用C ++做到這一點?
  • 如何從系統的外殼做?

歡迎回答Linux,Windows和OSX。

Linux / OSX(實際上是POSIX),編程(具有POSIX調用的任何語言),一般方案:

  1. 設置一個插座...
  2. fork()
  3. close(0)close(1) (不是必須的, dup2也會將其關閉...但是為了清楚起見添加了它)
  4. dup2(socket, 0)dup2(socket, 1)
  5. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM