決定標準輸入的性質:終端還是管道
在各種情況下,區分標準輸入(stdin) 是有益的代表一個終端或管道。與提供管道輸入時相比,在沒有來自終端的參數的情況下呼叫 Python 時,這種差異在 Python 所表現出的行為差異中變得很明顯。為了複製這種檢測,包括 C、C 和 Qt 在內的各種程式語言提供了不同的方法。
Unix 方法:isatty
對於 C 和 C ,Unix系統呼叫 isatty() 提供了一種決定 stdin 性質的方法。此函數採用一個表示正在查詢的文件的文件描述符的整數作為其參數。對於 stdin,通常使用表達式 fileno(stdin) 來獲得。如果檔案描述子對應於終端,isatty() 傳回非零值,表示 stdin 是終端。相反,零值表示 stdin 不是終端,可能代表管道或檔案。
範例:
#include <stdio.h> #include <io.h> ... if (isatty(fileno(stdin))) printf("stdin is a terminal\n"); else printf("stdin is a file or a pipe\n");
Qt 方法:QTextStream
對於Qt,由於框架的原因,需要不同的原因方法物件導向的方法。 Qt 使用 QTextStream 與 stdin 交互,可用於判斷 stdin 是否源自終端。透過以 stdin 作為參數呼叫 QTextStream(stdin) 來建立 QTextStream 實例。以下程式碼示範了這種方法:
QTextStream qin(stdin); bool isTerminal = qin.device()->isInteractive();
在這種情況下,如果 stdin 是終端,則 isInteractive 傳回 true,如果它是管道或文件,則傳回 false。
以上是stdin 是終端還是管道?的詳細內容。更多資訊請關注PHP中文網其他相關文章!