[英]How to use Windows ConPTY API from a process whose output has been redirected?
[英]How to tell if stderr has been redirected in Windows?
我希望程序在將stderr連接到控制台與將其重定向到文件/管道之間具有不同的行為。 在Unix系統中,我只能測試isatty(STDERR_FILENO)
,但是如何在Windows中進行呢? MSVCRT還有一個名為_isatty
的函數,它無法正常運行(例如, 檢測NUL文件描述符(isatty是偽造的) )。 我可以調用任何Windows或NT API進行測試嗎?
GetStdHandle
獲取stderr句柄。 GetFileType
可以找出文件的類型。 FILE_TYPE_CHAR
則stderr可能是控制台,但調用GetConsoleMode
進行檢查。 GetConsoleMode
失敗,則stderr已被重定向到另一個字符設備,例如打印機。 對我來說,最簡單的方法是使用fseek(stderr, 0, SEEK_CUR)
返回0
,如果stderr
重定向到一個文件,並<>0
,如果stderr
不重定向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.