2014-02-27 69 views
3

我正在用C語言編寫交互模式和批處理模式的shell。我想以交互模式打印提示並且不以批處理模式顯示。使用C編寫shell如何區分交互模式和批處理模式

bash> ./myshell 

應該顯示提示,並

bash> ./myshell < sample.txt 

應僅顯示從 「sample.txt的」 命令的輸出,但不是提示。

由於父進程(這是bash)使stdin重定向,我不知道如何myshell知道輸入流是從標準輸入還是從文件?

非常感謝您的幫助。

回答

4

isatty(3)可用於確定給定的文件描述符是否爲tty。殼將使用它來確定期望的輸入類型。

例如:

if (isatty(STDIN_FILENO)) { 
    // Interactive shell 
} 
else { 
    // Redirected stdin 
} 
+0

你的老闆!問題解決了。非常感謝! –