【发布时间】:2017-01-22 21:25:06
【问题描述】:
好吧,我到底做错了什么?我在 Ubuntu 上执行此操作,我希望它采用系统命令“ls”和诸如“-a”之类的参数,然后让子执行它,然后父打印出来。我不明白为什么我总是让“父母”返回两次。有什么想法吗?
#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()的第一个参数。不过,我还没有追踪到为什么你没有得到很多孩子再次运行父母的副本。 -
顺便说一句:main() 应该返回 int。
标签: c linux operating-system