使用重定向时获得意外的argc
这是代码。
#include<stdio.h>
int main(int argc,char* argv[])
{
fprintf(stderr,"arg count:%dn",argc);
return 0;
}
当输入以下cmd时:
./a.out x 3 >1.txt //case1
我得到了 argc 3。(在这种情况下,a.out x 和 3)
但是当输入以下cmd时:
./a.out x 3>1.txt //case2
我得到了 argc 2。似乎 3>1 被忽略了。
我预计 argc 是 3 像 case1。
(说明:case1 中 3 和 > 之间有一个空格)
为什么我有第二个案例?以及如何解决?
回答
首先,您必须记住所有重定向都是由 shell 本身处理的,它不会传递给程序。
命令
./a.out x 3 >1.txt
有三个参数a.out:命令本身,x和3。
和
./a.out x 3>1.txt
然后3>1是外壳处理的重定向的所有部分。它将描述符重定向3到文件1.txt。