详细分析以下代码#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> int main() { int i, r, p1, p2, fd[2]; char buf[50], s[50]; if (pipe(fd) < 0) { perror("pipe error"); exit(1); } while ((p1 = fork()) == -1); if (p1 == 0) { close(fd[0]); sprintf(buf, "Child process P1 is sending message!\n"); printf("Child process P1 is sending message!\n"); write(fd[1], buf, 50); sleep(1); close(fd[1]); exit(0); } else { while ((p2 = fork()) == -1); if (p2 == 0) { close(fd[0]); sprintf(buf, "Child process P2 is sending message!\n"); printf("Child process P2 is sending message!\n"); write(fd[1], buf, 50); sleep(1); close(fd[1]); exit(0); } close(fd[1]); wait(0); if ((r = read(fd[0], s, 50)) == -1) printf("can't read pipe.\n"); else printf("Parent process is reading (%s) \n", s); wait(0); if ((r = read(fd[0], s, 50)) == -1) printf("can't read pipe.\n"); else printf("Parent process is reading (%s) \n", s); close(fd[0]); } return 0; }
时间: 2024-02-02 20:03:05 浏览: 62
用c语言实现的逆序文本程序
这是一个使用管道实现进程间通信的示例代码。程序中使用了两个子进程p1和p2,以及一个父进程。父进程创建了一个管道fd,然后创建两个子进程p1和p2。子进程p1和p2分别向管道写入一条消息,然后关闭管道写入端。父进程阻塞等待两个子进程结束后,从管道读取两条消息,分别输出到屏幕上。
具体来说,代码运行流程如下:
1. 创建一个管道fd。
2. 父进程创建子进程p1,p1向管道写入一条消息,然后关闭管道写入端。
3. 父进程创建子进程p2,p2向管道写入一条消息,然后关闭管道写入端。
4. 父进程阻塞等待子进程p1和p2结束。
5. 父进程从管道读取一条消息,输出到屏幕上。
6. 父进程从管道读取另一条消息,输出到屏幕上。
7. 关闭管道读取端,程序结束。
在程序中,管道的读写操作使用了系统调用函数write和read。在子进程中,write函数用于向管道写入数据,read函数用于从管道读取数据;在父进程中,read函数用于从管道读取数据,write函数用于向管道写入数据。通过这种方式,进程之间就可以进行通信了。
阅读全文