2017-04-15 53 views
0
cat file.txt | grep hello 

我認爲這是cat file.txt被執行,任何被傳遞到標準輸出的管道輸入傳遞給grep hello的方式。然後grep hello查找給定輸入中匹配hello的所有匹配項。用C處理管道創建一個shell

這裏是我的困惑:不grep hello寫回管這樣的父進程輸出,無論是在標準輸出?或者grep hello將其返回的內容放入stdout中?它是如何工作的?

我問這個問題,因爲我在C.編寫shell

+0

這不是C在所有。 –

+0

你想做到這一點在C程序中或者是你在談論的東西像[C殼(https://www.cs.duke.edu/csl/docs/csh.html)? – tadman

+0

哦,對不起。我忘了指定我正在編寫一個shell。 – daniel

回答

2

cat的標準輸出連接到grep的標準輸入。 grep的stdout連接到默認位置,可能是終端。 grep不會將其輸出回饋到cat - 管道是單向的。

+0

... mmm,那麼當我們執行cat file1.txt時,爲什麼cat file1.txt的輸出沒有顯示? FILE2.TXT。它是否會發生,因爲貓file.txt的不寫入stdout但它是一個文件描述符管的一端,你是說貓的stdout是連接到grep的標準輸入,但它們都連接到相同的標準輸入。 – daniel

+0

我想是因爲管道是看到後,會創建一個新的進程我的上述評論是錯誤的,所以他們不共享相同的標準輸入。我覺得這個工作的方式,詳細闡述了什麼@約翰Kugelman說的是,file.txt的不子進程寫到標準輸出,而是這是一個文件描述符,然後標準輸入的FD管道的一端」 「被設置爲管道另一端的文件描述符,然後執行grep hello。 – daniel