對於有關學期末考試的練習,我必須編寫一個程序,該程序將顯示項目列表並讓用戶選擇其中一些項目。程序將輸出用空格分隔的選定項目。該程序可以這樣調用:程序的顯示輸出在反引號之間調用
$> ./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 ...
使用終端顯示的程序不適用於反引號(或更好的'$(...)'表示法)。至少,它可能根據其標準輸出是否爲終端而改變其行爲。由於練習是關於使用終端顯示器,您可能必須獲得創造性。也許你應該安排爲用戶的I/O操作使用'/ dev/tty',嚴格地將stdout留給非交互的東西。但是必要的設計是......次優的,非標準的,討厭的。提醒我不必使用該程序。 (哦,再次想到,你將不必提醒我......) –
寫入/ dev/tty的作品很棒!謝謝 ! 這只是爲了學習的目的,這個代碼不會在這個範圍之外使用;) –