好吧,我做错了什么?我在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
答案 0 :(得分:2)
恭喜:您的程序非常有用。我认为你通过插入Cprocess()
函数使事情变得比它们需要的复杂得多;没有它,发生的事情可能会更清楚一些。请允许我重新安排你的程序:
void main(int argc, char *argv[]) {
int pid = fork();
if (pid ==-1) {
perror("Error!!\n");
} else if (pid==0) {
char *sendcommand[] = { argv[1], argv[2], 0 };
execvp(argv[0], sendcommand);
exit(19);
} else {
wait(0);
printf("Parent\n");
}
}
这在功能上等同于原来的main()
,我打赌你会立即看到问题。
提示:
仔细查看
execvp()
的参数。
提示2:
execvp()
的第一个参数指定要运行的程序。
提示3:
你是认真的吗?让你的大脑工作,或至少你的调试器。