系统编程六
来源:互联网 发布:淘宝客鹊桥插件手机版 编辑:程序博客网 时间:2024/05/19 02:05
主要是讲进程之间的通信
传统的进程间通信:
无名管道(pipe) 有名管道(fifo) 信号(signal)
System v ipc对象:
共享内存 消息队列 信号量 POSIX信号量(无名、有名)
BSD:
套接字(主机与主机之间)
管道有三种:无名管道(pipe) 、有名管道(fifo) 、套接字
无名管道:用于一对一,而且要亲缘关系,而且数据量少。P1进程把数据通过管道发给内核,P2进程再通过管道从内
核中读出来,优点是由于P1,P2不是面对面传输的,而是通过管道内核,所以有些数据会不会阻塞啊,这些东西都不用你自己管,内核会帮你弄好。有名管道就适用于任何两个进程。
如果要数据量大量传输,就要用共享内存,它效率高,没有经过内核的中转。是面对面的,但是要用信号量,互斥锁来进行保护。消息队列是增强型的fifo,但是效率不高。
无名管道不保证写入原子性,什么意思呢?原子性就是不可分割,不保证写入原子性就是可分割,如果同时有P1,P2
进程写入同一管道,这两个进程之间的数据信息都会混合在一起,而不是有先后顺序,所以才有了无名管道只允许一
对一通信。程序大概就是父进程创建一个管道,获得读(fd[0])和写(fd[1])的描述符,父进程创建一个子进程的同时子进程也获得该管道的读写描述符,所以就可以进行读写操作了。
写者就是拥有这个管道的写描述符 读者就是拥有这个管道的读描写符。
pipe broken是指管道的读端堵住了,没有读者,你还写进去不就broken吗?
下图是管道的读写特性:
当有这个管道的写描述符时,有数据就正常读出来,没数据就阻塞等待,当没有管道的写描述符时,有数据就读出来,无数据就返回来。
当有这个管道的读描述符时,缓冲区满的话,就阻塞等待,缓冲区未满,就写入。当没有管道的读描述符时,无论如何写进去都没用,会立即收到信号SIGPIPE。
- 系统编程六
- 嵌入式 Linux系统编程(六)——系统信息
- C语言嵌入式系统编程修炼之六:性能优化
- C语言嵌入式系统编程修炼之六:性能优化
- C语言嵌入式系统编程修炼之(六)性能优化
- 《UNIX环境高级编程》六系统数据文件和信息读书笔记
- Windows 系统编程初探 (六)结构化异常处理之三:SEH 的简单应用
- Windows 系统编程初探 (六)结构化异常处理之三:SEH 的简单应用
- Linux系统进程控制编程(六)——wait和waitpid函数
- linux系统编程之文件与I/O(六):fcntl 函数与文件锁
- linux系统编程之基础必备(六):可重入函数、线程安全、volatile
- linux系统编程之信号(六):竞态条件与sigsuspend函数
- linux系统编程之信号(六):信号发送函数sigqueue和信号安装函数sigaction
- linux系统编程之进程(六):父进程查询子进程的退出,wait,waitpid
- linux系统编程之信号(六):信号发送函数sigqueue和信号安装函数sigaction
- 六、Linux系统编程-文件和IO(四)文件共享、复制文件描述符
- 十三、Linux系统编程-进程(六)进程组、会话期、守护进程
- 十九、Linux系统编程-信号(六)三种不同精度的睡眠sleep、usleep、nanosleep
- java并发内存模型
- tensorflow笔记 :常用函数说明
- hdoj 1394 Minimum Inversion Number 线段树||树状数组||分治
- linux比较好的网站和博客
- 酉矩阵(unitary matrix)
- 系统编程六
- Java实现矩阵相乘
- 利用SNMP向思科路由器发送命令
- Python二分法
- java异常
- PAT (Advanced Level) Practise 1124 Raffle for Weibo Followers (20)
- jQuery中DOM节点删除、复制、替换、
- <frameset>
- word embedding简要介绍