cat file.txt | grep hello
我認爲這是cat file.txt
被執行,任何被傳遞到標準輸出的管道輸入傳遞給grep hello
的方式。然後grep hello
查找給定輸入中匹配hello
的所有匹配項。用C處理管道創建一個shell
這裏是我的困惑:不grep hello
寫回管這樣的父進程輸出,無論是在標準輸出?或者grep hello
將其返回的內容放入stdout中?它是如何工作的?
我問這個問題,因爲我在C.編寫shell
cat file.txt | grep hello
我認爲這是cat file.txt
被執行,任何被傳遞到標準輸出的管道輸入傳遞給grep hello
的方式。然後grep hello
查找給定輸入中匹配hello
的所有匹配項。用C處理管道創建一個shell
這裏是我的困惑:不grep hello
寫回管這樣的父進程輸出,無論是在標準輸出?或者grep hello
將其返回的內容放入stdout中?它是如何工作的?
我問這個問題,因爲我在C.編寫shell
cat
的標準輸出連接到grep
的標準輸入。 grep
的stdout連接到默認位置,可能是終端。 grep
不會將其輸出回饋到cat
- 管道是單向的。
... mmm,那麼當我們執行cat file1.txt時,爲什麼cat file1.txt的輸出沒有顯示? FILE2.TXT。它是否會發生,因爲貓file.txt的不寫入stdout但它是一個文件描述符管的一端,你是說貓的stdout是連接到grep的標準輸入,但它們都連接到相同的標準輸入。 – daniel
我想是因爲管道是看到後,會創建一個新的進程我的上述評論是錯誤的,所以他們不共享相同的標準輸入。我覺得這個工作的方式,詳細闡述了什麼@約翰Kugelman說的是,file.txt的不子進程寫到標準輸出,而是這是一個文件描述符,然後標準輸入的FD管道的一端」 「被設置爲管道另一端的文件描述符,然後執行grep hello。 – daniel
這不是C在所有。 –
你想做到這一點在C程序中或者是你在談論的東西像[C殼(https://www.cs.duke.edu/csl/docs/csh.html)? – tadman
哦,對不起。我忘了指定我正在編寫一個shell。 – daniel