Linux,C使用cat with exec(3)

Ped*_*des 2 c linux exec system-calls cat

我正在做这个小程序,在调用程序时读取用户参数.像ls,rm等简单的调用很容易做到,我无法弄清楚该怎么做是这样的:

cat file1 >> file2我想要做的是将一个文件的内容添加到另一个文件,而不是替换内容.

所以如果我这样做:./ programName add file1 file2

if(strcmp(argv[1], "add")==0){
                char *parmList[] ={ "cat", argv[2], ">>",  argv[3], NULL}; 
                execv("/bin/cat", parmList);
                exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

返回是控制台上打印的两个文件

cat:>>:没有这样的文件或目录

我究竟做错了什么?没有猫,有没有其他方法可以做到这一点?ps:必须与exec(3).

编辑:对于任何感兴趣的人,回复帮助我找到了一种方法,尽管我不确定是否有更好的方法来做到这一点.我做的是转换

"cat",argv [2],">>",argv [3]

到一个字符串然后按照建议使用/ bin/sh -c.

这是代码

char parmList[180];
strcpy (parmList,"cat ");
strcat (parmList,argv[2]);
strcat (parmList," >> ");
strcat (parmList,argv[3]);
char *args[] = { "/bin/sh", "-c", parmList, NULL };
execve("/bin/sh", args, NULL);
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 6

>>是一个shell运算符.您尚未调用shell.如果要使用shell运算符,则必须这样做.给/bin/sh -c一试.