【问题标题】:Is there a way to detect input form file redirection? (C++)有没有办法检测输入表单文件重定向? (C++)
【发布时间】:2021-02-05 00:05:41
【问题描述】:

我正在制作一个以 3 种方式接收输入的程序:

  • 键盘(通过 cin)
  • 文件(通过 cmd 行给出的参数)
  • 和来自文件重定向的输入。

我正在做一个 if-else 语句,其中第一部分测试 cmd 行是否有 arg 以及没有给出文件时是否有 else 。现在我只是想找出如何制作一个 if 语句来检测输入是否来自文件重定向。谢谢

我正在尝试做的示例:

if(argc > 1) {
    //process file
}
else if(/*test for file redirect*/){
    //process input from file redirect
}
else {
    //process standard input
}

【问题讨论】:

  • 为什么需要区分重定向和键盘?它们都将通过进程的 STDIN 提供数据,因此std::cin 可以读取,因此只需以相同的方式处理它们。事实上,您可能会考虑将您的处理转移到一个单独的函数中,该函数将std::istream& 作为输入。当给出命令行 arg 时,打开 std::ifstream 并将其传递给函数。否则将std::cin 传递给函数。
  • 当数据来自文件重定向时,我只需要执行不同的操作。就这些

标签: c++ file io-redirection


【解决方案1】:

在 Linux(和大多数其他 Unix 风格)系统上,您可以:

#include <unistd.h>
bool stdin_is_redirected = isatty (0) == 0;

这依赖于 stdin 是文件描述符 0 的事实。

文档here

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多