我希望我的程序在stderr連接到控制檯和重定向到文件/管道之間有不同的行爲。在Unix系統中,我只能測試isatty(STDERR_FILENO)
,但我如何在Windows中執行此操作? MSVCRT也有一個名爲_isatty
的功能,它不能正常工作(例如,Detect NUL file descriptor (isatty is bogus))。是否有任何Windows或NT API我可以打電話來測試它?如何判斷stderr是否已在Windows中重定向?
1
A
回答
3
- 致電
GetStdHandle
獲取stderr句柄。 - 將該句柄傳遞給
GetFileType
以查明它是什麼類型的文件。 - 如果返回
FILE_TYPE_CHAR
則stderr可能是控制檯,但請致電GetConsoleMode
進行檢查。 - 如果
GetConsoleMode
失敗,則標準錯誤已被重定向到另一個字符設備,例如打印機。
+0
這是不夠的,正如[建議的重複](http://stackoverflow.com/q/40709193/1889329)中所述。 – IInspectable
+0
如果句柄不是字符設備,'GetConsoleMode'會成功嗎?如果不是,那麼'GetFileType'是多餘的。 –
0
對於我來說,最簡單的方法是使用fseek(stderr, 0, SEEK_CUR)
如果stderr
被重定向到一個文件,如果<>0
stderr
不重定向返回0
。
相關問題
- 1. 如何判斷stderr是否將輸出指向文件?
- 2. 如何判斷NSUserDefaults是否已保存?
- 3. 如何判斷HttpResponse是否已關閉?
- 4. 如何判斷tcplistener是否已關閉?
- 5. 如何判斷Streamwriter是否已關閉?
- 6. 如何判斷NSManagedObject是否已保存?
- 7. 如何判斷JavaScript是否會重定向頁面?
- 8. 如何判斷Windows進程是否已啓動
- 9. 如何在Python中重定向stderr?
- 10. 如何判斷sys.stdout是否已在Python中刷新
- 11. 如何判斷ajax計時器是否已在page_load中關閉
- 12. 在MFC中,如何判斷CComboBox是否已啓用?
- 13. 如何判斷任務是否已在django-celery中排隊?
- 14. 在csh中重定向stderr
- 15. 在jruby中重定向STDERR
- 16. 如何判斷Windows是否正在播放任何聲音?
- 17. 如何判斷SP1是否已安裝在Team Foundation Server 2008上?
- 18. 如何判斷熱鍵組合是否已存在
- 19. 如何判斷一個偵聽器是否已經在運行?
- 20. 如何判斷SP1是否已安裝在VS2008上?
- 21. Django - 如何判斷用戶是否被@login_required重定向到了頁面?
- 22. 如何判斷editText是否在焦點?
- 23. 如何判斷網頁是否存在?
- 24. 如何判斷路徑是否指向Windows中的應用程序
- 25. 如何判斷進程是否在Windows上的Python響應
- 26. 如何判斷SP1是否安裝在Windows Server 2008 R2 Standard上?
- 27. Windows bat腳本:如何判斷文件是否存在?
- 28. 如何判斷您是否在Windows上編譯?
- 29. 如何判斷計算機是否是C#中特定Windows域的一部分
- 30. 如何判斷某個方法是否在類中定義?
C和C++是不同的語言。你使用哪個? – Olaf
@Olaf:沒關係。 Windows API可以從C和C++中使用。在C或C++中尋求解決方案(這沒有什麼不同)是標準做法。 – IInspectable
@IInspectable:如果這是WinAPI的問題,它使用C綁定,因此它是一個C問題。 – Olaf