好吧我做错了什么?我在Ubuntu上这样做,我想让系统命令“ls”和一个参数如“-a”,然后让孩子执行它,然后父母只是打印出来。我不明白为什么我一直让“父母”返回两次。有任何想法吗?使用fork进行C语言编程()
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <sys/wait.h>
void Cprocess(char *commands, char *scommands[]);
void Pprocess(void);
void main(int argc, char *argv[])
{
char *sendcommand[] = {argv[1],argv[2],0};
char *commands = argv[0];
int pid;
if((pid=fork()) ==-1)
{
perror("Error!!\n");
}
else if(pid==0)
Cprocess(commands, sendcommand);
else
{
wait(0);
printf("Parent\n");
}
}
void Cprocess(char *argv1, char *argv2[])
{
execvp(argv1, argv2);
exit(19);
}
这是不是很好的我这里是我输入命令:
./filename ls -a
这里是我的结果:
filename1 filename2 filename3
Parent
Parent
你告诉你的孩子跑'command'这是'argv的[0]',它是当前程序。据推测,你的意思是复制'argv [1]'而不是'argv [0]'?或者,您可以不使用单独的'command'命令,只需使用'sendcommand [0]'作为'execvp()'的第一个参数。不过,我没有跟踪为什么你没有得到运行父母的许多副本。 –
BTW:main()应该返回int。 – wildplasser