linux 创建父进程和子进程并通信问题
发布网友
发布时间:2022-04-25 20:24
我来回答
共2个回答
热心网友
时间:2022-06-17 03:29
看我下面的程序,还有问题可以 hi我
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
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;
}
热心网友
时间:2022-06-17 03:30
5