Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121898
  • 博文数量: 23
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 329
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-04 13:23
个人简介

开心过好每天!

文章分类

全部博文(23)

文章存档

2013年(23)

分类: LINUX

2013-08-04 13:38:10

存在于内存中的特殊文件,不支持lseek操作,是一种半双工通信,有固定的读端和写端,它分为无名管道和有名管道,无名管道可用于具有亲缘关系的进程间通信,有名管道

则除无名管道特点外,还可用于无亲缘关系的进程间通信。

无名管道

int pipeFd[2];//pipeFd[0]读,pipeFd[1]写

if(pipe(pipeFd) < 0)

{

    perror("fail to pipe");

    exit(EXIT_FAILURE);

}

读写规则: 

A;读端存在,写管道

只要管道有空闲的空间,数据就会写到管道中

如果管道满,写管道堵塞

B:读端不存在,写管道

此时没有意义,写管道时内核会向这个进程发送SIGPIPE,此信号默认杀死进程

C:写端存在,读管道

如果管道中的数据 < 要求读的数据的大小,此时读取管道中实际的数据

如果管道中的数据 > 要求读的数据的大小,此时读取要求读出的数据的大小

如果管道中没有数据,读管道会堵塞

D:写端不存在,读管道

如果管道中有数据,读取实际数据

如果管道中没有数据,读管道不会阻塞,此时立即返回0(读到的全部是0)

有名管道

if(mkfifo("/home/linux/FIFO",0666) < 0 && errno != EEXIST)

{

    perror("fail to mkfifo");

    exit(EXIT_FAILURE);

}

注意:如果一个进程以只读方式打开一个有名管道,就会堵塞,直到另一个进程以只写方式打开有名管道文件

如果一个进程以只写方式打开一个有名管道,也会堵塞,直到另一个进程以只读方式打开有名管道文件

读写规则:同无名管道 

阅读(1893) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:进程间通信方式(2)---信号

给主人留下些什么吧!~~

7大爷2013-08-05 09:36:40

不错不错~