2011-11-10 21 views
5

我製作了一個包含客戶端和服務器的分佈式shell程序。客戶端向服務器發送命令請求,服務器在本地執行該命令,並將該命令的結果輸出到客戶端。我無法弄清楚如何將stdout/stderr重定向到客戶端。我使用execvp來執行命令。我想我可能不得不使用dup2?但我無法弄清楚如何正確使用它。任何幫助?將stdout和stderr重定向到分佈式shell程序的套接字

回答

7

您只需要使用dup2()將套接字的文件描述符複製到stderr和stdout文件描述符中。與重定向到管道幾乎一樣。

cpid = fork(); 
if (cpid == 0) { 
    dup2(sockfd, STDOUT_FILENO); 
    dup2(sockfd, STDERR_FILENO); 
    execvp(...); 
    /*... etc. etc. */ 
+0

所以我嘗試了這種方法,但沒有輸出顯示在客戶端。但是,取代sockfd,我只是把我的插座的變量。我猜這不是套接字的實際文件描述符?我如何才能真正找出該套接字的文件描述符是什麼? – y3di

+0

套接字文件描述符(在服務器上)是由'accept()'返回的 - 如果你不使用'fork()'/'execvp(),你可以讀/寫/ '。如果這是您正在使用的那個,那麼您的代碼可能會有不同的問題。 – Dmitri

+0

是否有任何代碼我應該做客戶端爲了輸出通過?我需要做一個read()或類似的東西[就好像服務器正在向該端口寫入數據] – y3di

相關問題