首页 > 解决方案 > 为什么不将重定向输入视为命令行参数?

问题描述

我正在尝试读取已从文件重定向的命令行参数。我使用的命令是 ./a.out < test.txt 而 test.txt 的内容是:Hello world。但是下面我的程序的输出没有打印 Hello world。相反,它只显示./a.out。为什么是这样?

int main(int argc, char* argv[], char* envp[]) {
    for (int i = 1; i < argc; i++) {
        printf("%s\n", argv[i]);
    }
}

标签: c

解决方案


在为程序准备命令行之前,shell 会拦截重定向命令:

myProg <infile -t >outfile

将传递给程序

myProg -t

并且在节目开始stdin之前stdout已经重新路由。所以程序永远不会看到重定向。


推荐阅读