我想在Linux系統上有一些讀取(2)行爲的精確度, 我試圖創建一個shell,並在讀取輸入時遇到問題。 我這樣做無限讀取(2)與管道命令
read(0, BUF, 4096);
所以事情是bash的(也是最殼)可以通過管道這樣的命令:
echo ls | bash
擊將執行LS只有一次,但是當我做這個讀總是給我返回相同的緩衝區,「ls」 因此它進入無限循環。 我想知道爲什麼閱讀(2)不會返回我0謝謝你。
我想在Linux系統上有一些讀取(2)行爲的精確度, 我試圖創建一個shell,並在讀取輸入時遇到問題。 我這樣做無限讀取(2)與管道命令
read(0, BUF, 4096);
所以事情是bash的(也是最殼)可以通過管道這樣的命令:
echo ls | bash
擊將執行LS只有一次,但是當我做這個讀總是給我返回相同的緩衝區,「ls」 因此它進入無限循環。 我想知道爲什麼閱讀(2)不會返回我0謝謝你。
您需要檢查read
的返回值。如果它返回0,那麼它到達輸入流的末尾。也就是說,不是這樣的:
read(0, BUF, 4096);
你需要寫:
int bytes_read = read(0, BUF, 4096);
,然後檢查是否bytes_read
爲零。
您可能在每次讀取後都不清除緩衝區。如果沒有什麼可讀的,read()
將返回0並且不向緩衝區寫任何內容。如果緩衝區沒有被清除,那麼之前的任何內容仍然會在那裏,這就是爲什麼你繼續得到你的無限ls
- 那裏仍然只有原始的ls
,但你仍然把它當作新的輸入。
這是非常感謝你的問題! – r3dalice
非常感謝!我現在明白了! – r3dalice
不客氣! – ruakh