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

标签 c++ c qt pipe stdin

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

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

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

最佳答案

使用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)

关于c++ - 检测标准输入是终端还是管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1312922/

相关文章:

c++ - 为什么移动语义与动态内存分配中的浅拷贝具有相同的行为?

c++ - QListWidget 中的 setSelectionModel 停止发射 itemSelectionChanged 信号

c - 打印字符串不一致

c - 在 c11 中支持 BitSet

qt - 如何从 QVBoxLayout 中删除(子)布局项?

c++ - Qt 项目管理与子项目 : Accessing classes from another project

C++ 指针分配不起作用(减少 34 字节)

c - 如何将 vasprintf() 与特殊字符 (%) 一起使用?

c++ - 如何隐藏 QTreeView 中的某些列?

在 ofstream 的文件名括号内输入代码中的值(如循环中的 i)的 C++ 语法