Linux进程的管道通信

#include
#include
#include
int pid1, pid2; // 定义两个进程变量
main( ) {
int fd[2];
char OutPipe[100], InPipe[100]; // 定义两个字符数组
pipe(fd); // 创建管道
while ((pid1 = fork( )) == -1); // 如果进程1创建不成功,则空循环
if (pid1 == 0)
{ // 如果子进程1创建成功,pid1为进程号
lockf(fd[1], 1, 0); // 锁定管道
sprintf(OutPipe, "/n Child process 1 is sending message!/n"); // 给Outpipe赋值
write(fd[1], OutPipe, 50); // 向管道写入数据
sleep(5); // 等待读进程读出数据
lockf(fd[1], 0, 0); // 解除管道的锁定
exit(0); // 结束进程1
}
else {
while ((pid2 = fork()) == -1); // 若进程2创建不成功,则空循环
if (pid2 == 0)
{
lockf(fd[1], 1, 0);
sprintf(OutPipe, "/n Child process 2 is sending message!/n");
write(fd[1], OutPipe, 50);
sleep(5);
lockf(fd[1], 0, 0);
exit(0);
}
else {
wait(0); // 等待子进程1 结束
read(fd[0], InPipe, 50); // 从管道中读出数据
printf("%s/n", InPipe); // 显示读出的数据
wait(0); // 等待子进程2 结束
read(fd[0], InPipe, 50);
printf("%s/n", InPipe);
exit(0); // 父进程结束
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值