就我學習編程而言,當我想將輸入重定向添加到我的程序中時,我將程序寫入執行時,它等待用戶的輸入(使用std :: cin或類似的東西)。但我很少被命令弄糊塗了。爲什麼我們可以重定向'less'命令的輸入,但是我們不能在沒有任何參數的情況下運行更少?
我們都知道,我們可以做這樣的事情:
ls -la | less
可是當我們嘗試執行
less
不帶任何參數,我們得到一個錯誤。怎麼來的 ?!
就我學習編程而言,當我想將輸入重定向添加到我的程序中時,我將程序寫入執行時,它等待用戶的輸入(使用std :: cin或類似的東西)。但我很少被命令弄糊塗了。爲什麼我們可以重定向'less'命令的輸入,但是我們不能在沒有任何參數的情況下運行更少?
我們都知道,我們可以做這樣的事情:
ls -la | less
可是當我們嘗試執行
less
不帶任何參數,我們得到一個錯誤。怎麼來的 ?!
less
接受來自stdin或文件的輸入。
由於接受來自終端的輸入(僅顯示相同的輸入回到終端)是沒有意義的,因此less
程序可能會檢查stdin是否是終端(使用isatty
)並拒絕運行。
爲完整起見見man 3 isatty
較少是尋呼機,一次顯示一個屏幕輸出的程序的UNIX術語。如果您將程序的輸出傳送到較少,則會一次顯示一個頁面的輸出。如果您在命令行上傳遞文件名,則會逐頁顯示這些文件。
如果你不這樣做,沒有什麼可以通過。它會拋出一個錯誤,因爲它沒有任何明智的做法。你想讓它顯示什麼?
你能指導我在我的程序中實現嗎?我的意思是我怎樣才能得到重定向的輸入,而不用等待用戶的輸入(如std :: cin)? – Shnd
這並不能解釋(a)在沒有參數的情況下執行,stdin從管道或文件重定向,(b)在沒有參數的情況下執行stdin來自鍵盤。 –
,我問這對_Unix&Linux_更詳細:如何isatty功能在短暫工作] (http://unix.stackexchange.com/questions/ 118156/how-can-we-distinction-that-input-to-our-program-is-directed-or-it-is-just-a-use) – Shnd