UNIX网络编程——进程间通信

来源:互联网 发布:穿越火线检测数据异常 编辑:程序博客网 时间:2024/06/06 01:20

    进程间通信,Interprocess Communication,IPC。主要有以下四种不同的IPC形式:

          A. 消息传递(管道、FIFO 和 消息队列);

          B. 同步(互斥量、条件变量、读写锁、文件和记录锁、信号量);

          C. 共享内存区(匿名共享内存区有名共享内存区);

          D. 远程过程调用(Solaris门、Sun RPC);


一、消息传递

1、管道和FIFO

(1)管道的根本局限在于没有名字,从而只能由有亲缘关系的进程使用。FIFO也叫有名管道,解决了这个限制。管道和FIFO都是使用read和write函数来访问的。

(2)shell命令:who  |  sort  |  lp  ——将创建三个进程和期间的两个管道:


(3)创建管道:int  pipe (int  fd[2])——提供一个单路数据流,返回两个文件描述符。fd[0]打开来读,fd[1]打开来写。管道的常见用途是用在各种shell中,这种情况下半双工管道足够。(可以用socketpair函数创建一个全双工的IPC管道)

(4)管道的典型用途是(单向数据流):为两个不同进程(一个父进程,一个子进程)提供进程间的通信。


首先父进程创建一个管道,然后调用fork派生一个自身的副本:


然后,父进程关闭读端,子进程关闭写端。


(5)双向数据流的两个管道:


(6)创建FIFO:int  mkfifo(const char × pathname,mode_t  mode),pathname是一个普通的unix路径名,也是该FIFO的名字。


2、单个服务器,多个客户


3、消息队列可认为是一个消息链表。 ——有足够写权限的线程可往队列中“放置”消息,有足够读权限的线程可从队列中取走消息。

(1)管道和FIFO是字节流模型,没有消息边界,也没有与每个消息关联的类型。

(2)当一个管道或着FIFO的最后一次关闭发生时,仍在该管道或FIFO上的数据将被丢弃。

(3)消息队列具有“随内核的持续性”。即使当前没有进程打开着某个消息队列,该消息队列及其上的各个消息也将一直存在直到引用计数达到0删除该队列为止。


二、同步

1、互斥锁和条件变量

(1)互斥锁(相互排斥):上锁与解锁:


(2)条件变量:等待与信号发送:

         互斥锁用于上锁,条件变量则用于等待。


2、读写锁:

互斥锁:把试图进入“临界区”的所有线程都阻塞。读写锁:把获取读写锁用于读和获取读写锁用于写进行区分。

(1)规则:A. 只要没有在写,就可以读;     B. 没有任何读、写时,才可以写。

(2)读锁:共享锁。      写锁:独占锁。

(3)获取与释放“读、写锁”:


3、记录上锁



4、信号量:



三、共享内存区

1、简介:

       共享内存区,信息不经由内核传递(可用IPC形式中最快的),数据只复制两次,一次从输入文件到共享内存区,一次从共享内存区到输出文件。显然,使用共享内存区的这些进程必须协调或同步对该共享内存区的使用(基于某种形式的同步)。


四、远程过程调用

1、门:

(1)简介:

       远程过程调用,Remote Procedure Call,RPC,被调用过程和调用过程处于同一台主机上的不同进程中。调用者称为客户,被调用的过程称为服务器。(客户和服务器之间以函数参数和返回值形式交换信息)

       门调用是同步的。


2、Sun RPC:


五、总结:



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三岁宝宝肚脐痛怎么办 做题速度太慢怎么办 孩子做题不动脑不会转弯怎么办? 孩子做题总是马虎怎么办 孩子做题总是眼高手低怎么办 小孩说幼儿园老师不喜欢他怎么办 初中学生了不喜欢读书怎么办 小孩吐怎么办给揉哪里 8岁了不爱写字怎么办呢 8岁了不会写字怎么办呢 高考做题时犯各种粗心错误怎么办 孩子做题不认真读题怎么办 孩子不爱学习怎么办有什么办法 小孩字写的不好怎么办 孩子的字写得丑怎么办 一年级孩子生字默不出来怎么办 5岁宝宝不爱写字怎么办 三年级小孩不自觉做作业怎么办 一年级的孩子不爱写字怎么办 一年级孩子不爱写作业怎么办 一年级的小孩不爱写字怎么办 小孩儿写字做作业磨蹭怎么办 孩子不学习成绩差不写作业怎么办 儿童4岁不会写字怎么办 小孩读中班还不会写字怎么办 幼儿园中班孩子不写字怎么办 小孩吃多了呕吐怎么办 一岁宝宝老便秘怎么办 4周岁半幼儿便秘怎么办 没胃口不能吃辣怎么办 九个月宝宝缺锌怎么办 宝宝4 5天不吃饭怎么办 16个月宝宝不肯吃饭怎么办 儿童不吃饭很瘦怎么办 小孩吃饭吃的少怎么办 宝宝突然晚上不睡觉怎么办 l岁宝宝吃多了怎么办 3个月婴儿厌食怎么办 11个月婴儿厌食怎么办 7个月的婴儿厌食怎么办 小孩记忆不好读书记不住怎么办