Chinaunix首页 | 论坛 | 博客
  • 博客访问: 383508
  • 博文数量: 96
  • 博客积分: 647
  • 博客等级: 上士
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-29 22:15
文章分类
文章存档

2015年(1)

2014年(10)

2013年(26)

2012年(59)

我的朋友

分类:

2012-10-18 11:25:07

Linux使用的进程间通信(IPC)方式:

1.     管道(pipe)和有名管道(FIFO)

2.     信号(signal)

3.     消息队列

4.     共享内存

5.     信号量

6.     套接字(socket)

管道通信:

管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。

管道包括无名管道和有名管道,前者用父进程和子进程间的通信,后者可用于任意两个进程间的通信。

无名管道由pipe()函数创建:

#include

int  pipe(int filedis[2]);

当一个管道建立时,它会创建两个文件描述符:

filedis[0]用于读管道,filedis[1]用于写管道。

管道读写:必须先创建一个管道,再通过fork函数创建一个子进程,该子进程会继承父进程所创建的管道(其实就是文件描述符)

FIFO:
#include

int  mkfifo(const char *pathname, mode_t mode)

其实FIFO就是一个文件,一旦创建了一个FIFO,就可以用对文件操作的函数对其操作。

当打开FIFO时,非阻塞标志(O_NONBLOCK)将对以后的读写产生如下影响:

1.     没有使用O_NOBBLOCK:访问要求无法满足时进程将阻塞。如试图读取空的FIFO,将导致进程阻塞。

2.     使用O_NONBLOCK:访问要求无法满足时不阻塞,立刻出错返回,errnoENXIO.

注意:管道中的数据读一次后就自动清空。

阅读(622) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~