现在的位置: 首页 > 综合 > 正文

进程控制理论<五>–进程通信方式对比

2014年09月05日 ⁄ 综合 ⁄ 共 1024字 ⁄ 字号 评论关闭

对于7种进程通信方式做综合比较。

1、无名管道:使用fd[2]表示管道建立后创建的两个文件描述符,可以直接操作这两个文件描述符实现无名管道的读写。其中

                                  fd[0]用于读管道(管道头部),fd[1]用于写管道(管道尾部)。

                               使用注意事项:1、只适用于血缘进程即父子进程。

                                                           2、数据流单向性。读管道fd[0]时,关闭写管道fd[1];写管道fd[1]时,关闭读管道fd[0];

 

2、有名管道:适用任意进程间通信。如何实现的?因为创建有名管道int mkfifo(const char *pathname ,mode_t mode) 时,创建pathname对应路径下文件,任意进程都可以访问文件即实现进程通信。

 

3、信号处理:主要用于信号通知,信号类型必须是系统支持的命令。

                          进程用kill函数将信号发送给另一个进程;

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

                                           

 

4、共享内存:在物理内存开辟一段内存区,作为共享区域。任意进程访问该段共享内存区步骤:

                             (1)
创建共享内存
使用
shmget函数,返回共享内存标识符shmid。

                             (2)
映射共享内存
将这段创建的共享映射到具体的进程空间去,使用shmat函数。

                              完成上述两步,进程可以对标识符shmid的共享内存访问了

 

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

       消息格式:

        Struct msgbuf

         {

     long   mtype;   //消息类型>0

     char  mtext[1];  //消息数据的首地址

}

6、信号量:主要用于控制进程(执行顺序等)

 

 

7、socket

【上篇】
【下篇】

抱歉!评论已关闭.