必威体育Betway必威体育官网
当前位置:首页 > IT技术

pipe函数有关阻塞问题

时间:2019-06-21 16:45:15来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

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;

}

相关阅读

Matlab中自定义函数(一)

作为一个程序员出生的Matlab学习者,不能定义函数那简直是受不了!! 最重要的一点! 定义函数的时候,很多时候都会很迷的一般,使用不了

wait(),waitpid()函数

首先我们来了解一下所谓的僵尸进程,僵尸进程就是两个进程,一个父进程,一个子进程,其子进程终止后,0-3G的用户内存被回收,而3-4G的部分内

服务器遇到Broken Pipe崩溃之异常分析报告

问题描述:Linux+JDK1.7+Tomcat7+mysql部署的WEB项目,线上时常抛出该异常(文章底部有解决方案)。org.apache.catalina.connector.Clien

C/C++ 学习笔记:istringstream、ostringstream、string

0、C++的输入输出分为三种:(1)基于控制台的I/O(2)基于文件的I/O(3)基于字符串的I/O 1、头文件[cpp] view plaincopyprint? #incl

container of()函数简介

在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(

分享到:

栏目导航

推荐阅读

热门阅读