pipe函数有关阻塞问题

注:pipe函数创建无名管道

1、pipe函数读阻塞

#include <stdio.h>
#include <unistd.h>
int main()
{
int fd[2];
int ret;
char read_buf[128] = {0};
char write_buf[] = "hello linux\n";
ret = pipe(fd);
if(ret < 0)
{
perror("create pipe failed\n");
return -1;
}
printf("fd[0] = %d,fd[1] = %d \n",fd[0],fd[1]);
write(fd[1],write_buf,sizeof(write_buf));
read(fd[0],read_buf,128);   //此时读过之后,无名管道便为空的,当再次读时,则会阻塞
printf("read data from pipe %s",read_buf);

printf("second read before \n");
read(fd[0],read_buf,128);
printf("second read after \n");
close(fd[0]);
close(fd[1]);
return 0;
}

2、pipe函数写阻塞

#include <stdio.h>
#include <unistd.h>
int main()
{
int fd[2];
int i;
int ret;
char read_buf[128] = {0};
char write_buf[] = "hello linux\n";
ret = pipe(fd);
if(ret < 0)
{
perror("create pipe failed\n");
return -1;
}
printf("fd[0] = %d,fd[1] = %d \n",fd[0],fd[1]);
i =0;
while(i < 5041)
{   
write(fd[1],write_buf,sizeof(write_buf));  //此时因为只有写,而没有读,因此便阻塞在了下一步读,要解决这个问                    //read(fd[0],read_buf,128);                                                            //题,只需加上这两句代码即可
 //printf("read data from pipe %s",read_buf);
i++;
}
return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxa1334

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值