我試圖實現一個支持多個管道的簡單shell程序。現在我的shell可以實現一些簡單的內置命令和外部命令。我通過從空格" "
分隔的命令行獲取用戶輸入,並將每個字符串放在char* argv[]
中。現在的問題是執行管道。我在這個鏈接http://www.cs.loyola.edu/~jglenn/702/S2005/Examples/dup2.html上讀了一篇關於它的文章。我明白它是如何工作的。在Linux Shell中使用C實現管道使用C
所以我想每次約strcmp
argv[i]
與"|"
,我所遇到的管道,我fork
一個新的進程。然後我把管子放在char* argv[]
之前的管子和另一個char* argv[]
的管子之後。這可能適用於1管道,但如果用戶輸入多個管道有多個管道,事情可能會用這種方法乏味。我的主要問題是關於分離管道兩端的字符串。關於如何實現它的任何想法?謝謝。
謝謝您的回覆。第3號是我的問題所在。如何將'char * []'類型的參數數組劃分爲另一個'char * []'的數組?如果我有多個管道,是否必須爲遇到的每個管道連續創建一個數組?我使用execvp來執行參數數組。 – mkab
@mkab:據此編輯。 – thiton
我想我會把握一點。所以這個分而治之的方法應該在while [i]!= NULL'的時候完成。我對嗎?我也應該這樣調用execvp:'execvp(* my_arguments,my_arguments)'而不是'execvp(* my_arguments,arguments)'? – mkab