2012-05-22 77 views
1

程序可以檢測它的標準輸入是來自鍵盤輸入的 而不是 從文件重定向?在c?Stdin來自鍵盤或來自文件

+0

的可能重複的[檢測如果標準輸入是在C/C++/Qt的一個端子或管?](http://stackoverflow.com/questions/1312922/detect-if-stdin-is-a-terminal-or-管中CC-qt)的 – geoffspear

回答

7

是,在大多數系統上。在POSIX系統(在Linux,Mac OS X,BSD,加上更多),你可以使用文件描述符0(標準輸入)isatty(3)功能。在Windows上,您可以使用_isatty。例如:

if(isatty(0)) 
{ 
    // standard input is a terminal device 
} 

注意,許多程序使用isatty以改變它們的輸出緩衝行爲:如果標準輸出是終端,輸出緩衝(例如,每換行獲取打印後它的沖洗)線,而如果標準輸出是不是一個終端,它的全緩衝(例如它的沖洗僅當緩衝器變滿時,處理正常退出,或流被明確地被應用程序刷新)。