使用重定向时出现意外的 argc

Get unexpected argc when use redirection

这是代码。

#include<stdio.h>

int main(int argc,char* argv[])
{
    fprintf(stderr,"arg count:%d\n",argc);
    return 0;
}

当键入以下命令时:

./a.out x 3 >1.txt  //case1

我得到了 argc 3。(在本例中,a.out x 和 3)

但是当键入以下命令时:

./a.out x 3>1.txt //case2

我得到了 argc 2。似乎 3>1 被忽略了。

我预计 argc 和 case1 一样是 3。

(说明:案例 1 中 3 和 > 之间有一个 space)

为什么我得到第二个案例?以及如何解决?

首先你要记住所有的重定向都是由shell本身处理的,它不会传递给程序。

命令

./a.out x 3 >1.txt

a.out 有三个参数:命令本身,x3

./a.out x 3>1.txt

然后 3>1 是 shell 处理的重定向的所有部分。它将描述符 3 重定向到文件 1.txt.