C++ 检测输入重定向

标签 c++ iostream io-redirection

<分区>

Possible Duplicate:
Detect if stdin is a terminal or pipe in C/C++/Qt?

假设我们有一个接受标准 C 输入的小程序。

我想知道用户是否正在使用输入重定向,例如:

./programm < in.txt

有没有办法检测程序中这种输入重定向的方式?

最佳答案

没有可移植的方法来做到这一点,因为 C++ 没有说明 cin 的来源。在 Posix 系统上,您可以测试 cin 是来自终端还是使用 isatty 重定向的,像这样:

#include <unistd.h>

if (isatty(STDIN_FILENO)) {
    // not redirected
} else {
    // redirected
}

关于C++ 检测输入重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8079139/

相关文章:

c++ - 从 C++ 析构函数调用自定义免费 C 例程?

c++ - 为什么我会收到 'multiple definition' 错误?我如何解决它?

string - 在 Julia 中剪切文件

c - 将标准错误重定向到 C 中的字符串

c++ - 创建一个空的 shared_ptr 最简单的方法是什么?

c++ - xcode\377 倒置 '?'

c++ - 如果我已经重载了 << 和 >> 运算符,如何获取 ostream

c++ - cout 和字符串连接

c - C 中通过管道重定向 stdin 和 stdout 适用于外部程序,但不适用于递归调用

batch-file - 如果我重定向到批处理文件而不是调用它,为什么批处理文件不会保持变量