检测标准输入是终端还是管道?

新手上路,请多包涵

当我从没有参数的终端执行“ python ”时,它会打开 Python 交互式 shell。

当我从终端执行“ cat | python ”时,它不会启动交互模式。不知何故,在没有得到任何输入的情况下,它检测到它已连接到管道。

我将如何在 C 或 C++ 或 Qt 中进行类似的检测?

原文由 Mike McQuaid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 472
2 个回答

使用 isatty

 #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");

(在 Windows 上,它们带有下划线前缀: _isatty_fileno

原文由 RichieHindle 发布,翻译遵循 CC BY-SA 2.5 许可协议

您可以致电 stat(0, &result) 并检查 !S_ISREG( result.st_mode ) 。不过,那是 Posix,而不是 C/C++。

原文由 Marc Mutz - mmutz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题