2014-03-04 18 views
1

就我學習編程而言,當我想將輸入重定向添加到我的程序中時,我將程序寫入執行時,它等待用戶的輸入(使用std :: cin或類似的東西)。但我很少被命令弄糊塗了。爲什麼我們可以重定向'less'命令的輸入,但是我們不能在沒有任何參數的情況下運行更少?

我們都知道,我們可以做這樣的事情:

ls -la | less 

可是當我們嘗試執行

less 

不帶任何參數,我們得到一個錯誤。怎麼來的 ?!

+0

,我問這對_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

回答

3

less接受來自stdin或文件的輸入。

由於接受來自終端的輸入(僅顯示相同的輸入回到終端)是沒有意義的,因此less程序可能會檢查stdin是否是終端(使用isatty)並拒絕運行。

爲完整起見見man 3 isatty

+0

這就是我尋找的答案:D謝謝你Dietrich Epp – Shnd

+0

順便說一句你能給我更多關於'isatty'的文檔嗎?某種教程,我該如何將指針或輸入流的某些內容傳遞給此函數? – Shnd

+1

@Shnd:只需傳遞0即可。 –

2

較少是尋呼機,一次顯示一個屏幕輸出的程序的UNIX術語。如果您將程序的輸出傳送到較少,則會一次顯示一個頁面的輸出。如果您在命令行上傳遞文件名,則會逐頁顯示這些文件。

如果你不這樣做,沒有什麼可以通過。它會拋出一個錯誤,因爲它沒有任何明智的做法。你想讓它顯示什麼?

+0

你能指導我在我的程序中實現嗎?我的意思是我怎樣才能得到重定向的輸入,而不用等待用戶的輸入(如std :: cin)? – Shnd

+1

這並不能解釋(a)在沒有參數的情況下執行,stdin從管道或文件重定向,(b)在沒有參數的情況下執行stdin來自鍵盤。 –

相關問題