stderrがコンソールに接続されているときと、ファイル/パイプにリダイレクトされているときとで、プログラムの動作が異なるようにしたい。 Unixシステムでは、私はちょうどisatty(STDERR_FILENO)
をテストすることができますが、Windowsではどうしたらいいですか? MSVCRTには_isatty
という名前の関数もあり、正しく機能しません(たとえば、Detect NUL file descriptor (isatty is bogus))。テストするために呼び出すことができるWindows APIまたはNT APIはありますか?Windowsでstderrがリダイレクトされているかどうかを確認するには?
1
A
答えて
3
- stderrハンドルを取得するには、
GetStdHandle
を呼び出します。 - そのハンドルを
GetFileType
に渡して、そのファイルの種類を確認します。 FILE_TYPE_CHAR
が返された場合、stderrはコンソールになる可能性がありますが、確認するにはGetConsoleMode
を呼び出します。GetConsoleMode
が失敗した場合、stderrはプリンタなどの別の文字デバイスにリダイレクトされています。
+0
[提案された複製](http://stackoverflow.com/q/40709193/1889329)で説明されているように、これでは不十分です。 – IInspectable
+0
ハンドルが文字デバイスでない場合、 'GetConsoleMode'は成功しますか?そうでなければ、 'GetFileType'は冗長です。 –
0
は私にとっては、最も簡単な方法は、stderr
をファイルにリダイレクトされ、<>0
stderr
場合がリダイレクトされていない場合0
を返しfseek(stderr, 0, SEEK_CUR)
を使用することでした。
関連する問題
- 1. ユーザーがdbで確認されているかどうかを確認
- 2. WindowsデスクトップアプリケーションがWindowsハンドヘルドデバイスで使用されているかどうかをプログラムで確認する方法
- 3. bash入力がPHPスクリプトにリダイレクトされているかどうかを確認するには?
- 4. プロセスがWindowsでPython 2.2を使用して実行されているかどうかを確認するには?私は確認する必要がある
- 5. stderrが出力をファイルに出力しているかどうかを確認する方法は?
- 6. Authguard anglefire2電子メールが確認されているかどうかを確認
- 7. WindowsプロセスがC++で別のWindowsプロセスが親プロセスであるかどうかを確実に確認するにはどうすればよいですか?
- 8. スクリーンセーバーが実行されているかどうかを確認するには?
- 9. 画像がプリロードされているかどうかを確認するには?
- 10. Sitecore:ImageMagickが使用されているかどうかを確認するには?
- 11. divがロードされているかどうかを確認するには?
- 12. スプライトオブジェクトが表示されているかどうかを確認するには?
- 13. フルスクリーンアプリケーションが実行されているかどうかを確認するには?
- 14. シートが削除されているかどうかを確認するには?
- 15. ビューが描画されているかどうかを確認するには
- 16. Qpidがインストールされているかどうかを確認するには?
- 17. ダーティチェックが使用されているかどうかを確認するには?
- 18. ALTキーが押されているかどうかを確認
- 19. アクティブレコードテーブルが変更されているかどうかを確認
- 20. プログラムがWindows上のUbuntuでBashで実行されているかどうかを確認するにはどうすればいいですか?
- 21. は、IISがインストールされているかどうかを確認するか
- 22. stderrがbashのパイプであるかどうかを確認してください
- 23. ユーザが認証されているかどうかを確認する
- 24. HealthKitが承認されているかどうかを確認する方法
- 25. 実行ファイルのパスを使用してWindowsサービスがインストールされているかどうかを確認するにはどうすればよいですか?
- 26. WindowsでTCP/IPポートが既に使用されているかどうかを確認しますか?
- 27. リダイレクトされている場合、行に値があるかどうかを確認します。
- 28. WKWebViewがユーザーの操作のためにリダイレクトされているかどうかを確認する方法?
- 29. データベースが更新されているかどうかの確認
- 30. charが押されているかどうかの確認
CとC++は異なる言語です。あなたはどちらを使いますか? – Olaf
@Olaf:それは問題ではありません。 Windows APIは、CとC++の両方から使用できます。 CまたはC++で解決策を求めるのが標準的な方法です(違いはありません)。 – IInspectable
@IInspectable:WinAPIの問題であれば、Cバインディングを使用しているので、Cの問題です。 – Olaf