2012-11-22 48 views
0

對於有關學期末考試的練習,我必須編寫一個程序,該程序將顯示項目列表並讓用戶選擇其中一些項目。程序將輸出用空格分隔的選定項目。該程序可以這樣調用:程序的顯示輸出在反引號之間調用

$> ./my_program foo1 foo2 foo3 

或像這樣:

$> ls `my_program foo1 foo2 foo3` 

我的計劃行之有效在第一種情況下,但是在第二種情況下,MY-的標準輸出由反引號截獲並不會在終端上顯示。我知道,如果我盲目地選擇一些項目,我得到了ls的預期結果,程序運行良好。

在我的計劃,我不能使用任何內置函數除外以下: •IOCTL •tcsetattr •tcgetattr •tgetent的 •tgoto •tputs •tgetstr •tparm •開 •關閉 •寫 •malloc的 •免費 •讀取 •退出 •信號

如何在第二種情況下調用時向用戶顯示my_program的stdout?

編輯: 我發現的唯一的選擇是輸出一切stderr和輸出所選項目到stdout ...

+1

使用終端顯示的程序不適用於反引號(或更好的'$(...)'表示法)。至少,它可能根據其標準輸出是否爲終端而改變其行爲。由於練習是關於使用終端顯示器,您可能必須獲得創造性。也許你應該安排爲用戶的I/O操作使用'/ dev/tty',嚴格地將stdout留給非交互的東西。但是必要的設計是......次優的,非標準的,討厭的。提醒我不必使用該程序。 (哦,再次想到,你將不必提醒我......) –

+0

寫入/ dev/tty的作品很棒!謝謝 ! 這只是爲了學習的目的,這個代碼不會在這個範圍之外使用;) –

回答

3

您可以打開和my_program/dev/tty,這將是隻對終端不到重定向的stdout。

+0

很好,謝謝;) –

相關問題