
1父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。
2. 父进程调用fork创建⼦进程,那么子进程也有两个文件描述符指向同一管道。
3. 父进程关闭管道读端,子进程关闭管道写端。父进程可以往管道里写,子进程可以从管道⾥读,管道是用环形队列实现的,数据从写端流入从读端流出,这样就实现了进程间通信
匿名管道间的通信是单向的,并且是、只能是具有血缘关系的进程间通信
#include <unistd.h>#include <stdio.h>
#include <stdlib.h>
int main()
{
int fd[2]
// 创建二个 fd, fd[0] 管道用于读, fd[1] 管道用于写
pipe(fd)
// 创建进程
pid_t pid = fork()
if (pid == 0)
{
// 子进程,读取整数 n
int n
read(fd[0], &n, sizeof(int))
// 计算 1 - n 的偶数和
int sum = 0
for (int i = 1 i <= n ++i)
{
if (i % 2 == 0)
{
sum += i
}
}
printf("The sum of all even number from 1 to %d is %d\n", n, sum)
// 子进程工作完后使用 exit(0) 退出
exit(0)
}
else
{
// 父进程,写入整数 n
int n
printf("Please input n: ")
scanf("%d", &n)
write(fd[1], &n, sizeof(int))
}
}
Linux 环境下编译及测试结果如下:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)