簡體   English   中英

如何判斷stderr是否已在Windows中重定向?

[英]How to tell if stderr has been redirected in Windows?

我希望程序在將stderr連接到控制台與將其重定向到文件/管道之間具有不同的行為。 在Unix系統中,我只能測試isatty(STDERR_FILENO) ,但是如何在Windows中進行呢? MSVCRT還有一個名為_isatty的函數,它無法正常運行(例如, 檢測NUL文件描述符(isatty是偽造的) )。 我可以調用任何Windows或NT API進行測試嗎?

  1. 調用GetStdHandle獲取stderr句柄。
  2. 將該句柄傳遞給GetFileType可以找出文件的類型。
  3. 如果返回FILE_TYPE_CHAR則stderr可能是控制台,但調用GetConsoleMode進行檢查。
  4. 如果GetConsoleMode失敗,則stderr已被重定向到另一個字符設備,例如打印機。

對我來說,最簡單的方法是使用fseek(stderr, 0, SEEK_CUR)返回0 ,如果stderr重定向到一個文件,並<>0 ,如果stderr不重定向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM