Chinaunix首页 | 论坛 | 博客
  • 博客访问: 709566
  • 博文数量: 240
  • 博客积分: 3616
  • 博客等级: 大校
  • 技术积分: 2663
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-21 23:59
文章分类

全部博文(240)

文章存档

2013年(6)

2012年(80)

2011年(119)

2010年(35)

分类: LINUX

2010-11-03 17:48:01

为了更好的理解管道,请看下面的程序
#include
#include
#include
#include
int main()
{
 int pipe_fd[2];
 
 if(pipe(pipe_fd)<0)//创建一无名管道
 {
  printf("pipe creat \n");
  return -1;
 }
 else
 {
  printf("pipe create success \n");
 
 }
 close(pipe_fd[0]);//关闭管道描述符
 close(pipe_fd[1]);
}
/*---------------------------------
1.现在linux中使用较多的进程间通信方式有以下几种:
1)管道(pipe)以及有名管道(named pipe):管道可用于具有亲缘关系进程间的
通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的
通信。
2)信号(signal):信号是软件层次上对中断机制的一种模拟,用于通知接受进程
有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说
是一样的。
3)消息队列:消息队列是消息的链接表。它克服了前两种通信方式中信息量有限
的缺点,具有写权限的进程可以向消息队列中按照一定的饿规则添加新消息,对
消息队列有读权限的进程则可以从消息队列中读取消息。
4)共享内存:它使得多个进程可以访问同一块内存空间,不同进程可以及时看到
对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如
互斥锁和信号量等。
5)信号量:主要作为进程间以及同一进程之间的同步手段。
6)套接字(socket):它用于不同机器之间的进程间通信。
2.管道是把一个程序的输出直接连接到另一个程序的输入,这里所说的管道主要指
无名管道,它具有如下特点:
.它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)
.它是一个半双工的通信模式,具有固定的读端和写端。
.管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read,write等
函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在内存中。
3.管道创建与关闭
1)管道是基于文件描述符的通信方式,它会创建两个文件描述符fds[0]和fds[1],其中
fds[0]固定用于读管道,而fd[1]固定用于写管道,这样就构成了一个半双工的通道。
2)管道关闭时只需将这两个文件描述符关闭即可,而使用普通的close函数逐个关闭
各个文件描述符。
4.创建管道函数
1)所需要的头文件:#include
2)函数原型:int pipe(int fd[2])
3)函数输入参数
fd[2]:管道的两个文件描述符,之后就可以直接操作这两个文件描述符。
4)函数的返回值
成功:0
出错:-1
5.实验
[root@localhost the_eight_step]# gcc pipe.c -o pipe
[root@localhost the_eight_step]# ./pipe
pipe create success
------------------------------------*/
阅读(640) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-05 08:38:11

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com