进程间通信2

来源:互联网 发布:象棋旋风软件价格 编辑:程序博客网 时间:2024/06/11 20:05

一目的:数据传输,资源共享,通知事件,进程控制

二.分类:管道和有名管道,信号,消息队列,共享内存,信号量,套接字

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

注意事项:必须在系统调用fork()前调用pipe(),否则子进程将不会继承文件描述符。

2.信号通信:信号机制是unix系统中最为古老的进程间通信机制,很多条件可以产生同一信号:1.当用户按某些按键时,产生信号2.硬件异常产生信号3.用户用kill函数将信号发送给另一进程4.用户可以kill命令将信号发送给其他进程

信号处理的3种方式:1.忽略此信号2.执行用户希望的动作3.执行系统默认的动作

3.共享内存:是被多个进程共享的一部分物理内存,共享内存是进程间共享数据的一种最快的方法。一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。

实现共享内存的两个步骤:1.创建共享内存2.映射共享内存

4.消息队列:就是一个消息的链表,可以把消息看做一个记录,具有特定的格式,进程可以向中按照一定的规则添加新消息,另一个进程则可以从消息队列中读走消息。

5.信号量:主要用途是保护临界资源,进程可以根据它判定是否能够访问某些共享资源,除了用于访问控制外,还可以用于进程同步。

分类:二值信号灯,计数信号灯