c语言全局变量fork,使用fork进行C语言编程()

本文讨论了一位程序员在Ubuntu上使用C语言编程时遇到的问题,涉及fork和execvp函数。程序员尝试让父进程等待子进程执行ls -a命令,但结果出现了父进程重复打印的情况。博客分析了可能的错误,并提示了main函数应返回int类型。
摘要由CSDN通过智能技术生成

好吧我做错了什么?我在Ubuntu上这样做,我想让系统命令“ls”和一个参数如“-a”,然后让孩子执行它,然后父母只是打印出来。我不明白为什么我一直让“父母”返回两次。有任何想法吗?使用fork进行C语言编程()

#include

#include

#include

#include

#include

#include

#include

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

你告诉你的孩子跑'command'这是'argv的[0]',它是当前程序。据推测,你的意思是复制'argv [1]'而不是'argv [0]'?或者,您可以不使用单独的'command'命令,只需使用'sendcommand [0]'作为'execvp()'的第一个参数。不过,我没有跟踪为什么你没有得到运行父母的许多副本。 –

+0

BTW:main()应该返回int。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值