无名管道通信,父进程创建10个子进程,通过无名管道给子进程分别发送10个不同的字符串,子进程将接收到的字符串打印至屏幕,打印格式“I am proc<xxx>,recive<xxx>”
时间: 2024-03-24 12:37:34 浏览: 137
无名管道 进程间的通信
下面是基于C语言的实现代码:
```
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define MAX_COUNT 10
#define BUF_SIZE 100
int main()
{
int pid, i;
int fd[2];
char buf[MAX_COUNT][BUF_SIZE] = {"Hello", "World", "Linux", "Programming", "System", "Network", "Process", "Communication", "Pipe", "Fork"};
if (pipe(fd) < 0) {
printf("Pipe creation failed.\n");
return -1;
}
for (i = 0; i < MAX_COUNT; i++) {
pid = fork();
if (pid < 0) {
printf("Fork failed.\n");
return -1;
} else if (pid == 0) { // 子进程
char recv_buf[BUF_SIZE];
close(fd[1]); // 关闭写端
read(fd[0], recv_buf, BUF_SIZE);
printf("I am proc %d, recive %s\n", getpid(), recv_buf);
close(fd[0]); // 关闭读端
return 0;
} else { // 父进程
close(fd[0]); // 关闭读端
write(fd[1], buf[i], strlen(buf[i])+1);
close(fd[1]); // 关闭写端
}
}
return 0;
}
```
代码解释:
首先创建了一个长度为10的字符串数组buf,存储10个不同的字符串。然后通过pipe()函数创建一个无名管道,fd[0]表示管道读端,fd[1]表示管道写端。
接下来进入循环,通过fork()函数创建10个子进程。对于每个子进程,关闭写端fd[1],读取管道上的数据,打印接收到的字符串,最后关闭读端fd[0]并返回0。
对于父进程,关闭读端fd[0],将buf[i]写入管道,关闭写端fd[1]。
最后,程序返回0。运行程序,可以看到10个子进程分别打印出接收到的字符串。
阅读全文