使用重定向时出现意外的 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
有三个参数:命令本身,x
和 3
。
有
./a.out x 3>1.txt
然后 3>1
是 shell 处理的重定向的所有部分。它将描述符 3
重定向到文件 1.txt
.
这是代码。
#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
有三个参数:命令本身,x
和 3
。
有
./a.out x 3>1.txt
然后 3>1
是 shell 处理的重定向的所有部分。它将描述符 3
重定向到文件 1.txt
.