linux父子进程的顺序,Linux有关创建子进程并用execlp()系统调用执行程序的实验。反复执行该程序,次序好乱啊,没有章理???...

看我下面的程序,还有问题可以baidu hi我

#include

#include

#include

#include

int main(int argc, const char *argv[])

{

int pid, pfd[2], seq;

if (argc != 2)

{

printf("Usage:\t %s num\n", argv[0]);

return 1;

}

seq = atoi(argv[1]);

if (seq <= 0)

{

printf("Error: seq shall be larger than 0.\n");

return 1;

}

pid = fork();

if (pid == 0)

{

/* child 1 */

execlp("/bin/ls", "/bin/ls", "-R", ".", NULL);

}

else if (pid > 0)

{

wait(NULL);

printf("\n\nThis is parent process, child 1 finished.\n");

}

/* create pipe */

pipe(pfd);

pid = fork();

if (pid == 0)

{

/* child 2 */

int next = 1, i, fib = 0, tmp;

close(pfd[0]);

for (i = 0; i < seq; i++)

{

write(pfd[1], &fib, sizeof(fib));

tmp = fib;

fib = next;

next += tmp;

}

/* -1 indicates the end of fibonacci seq */

fib = -1;

write(pfd[1], &fib, sizeof(fib));

return 0;

}

else if (pid > 0)

{

/* parent */

int fib;

close(pfd[1]);

wait(NULL);

printf("In parent process, child 2 finished, time to print fibonacci sequence...\n");

while (read(pfd[0], &fib, sizeof(fib)) == sizeof(fib))

{

if (fib >= 0)

{

printf("%4d ", fib);

}

else

{

printf("\n");

break;

}

}

printf("\n All DONE!\n");

}

return 0;

}

取消

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值