关于在LINUX下的进程间通信学习
在Linux系统中我们总会遇到想要两个进程之间进行通信,我们该怎么去进行进程间的通信呢,在Linux下有以下几种通信方式,无名管道,有名管道,消息队列,信号,信号量,共享内存,内存映射文件,套接字等等;
1.管道(PIPE)
管道相当于是一片共享内存,一个进程创建一个管道时,被称为管道服务器,当一个进程往管道写入数据时,另一个进程就可以从管道读出来;
无名管道只能用于具有亲缘关系的进程进行通信,而有名管道可以利用与不同的进程,即使没有亲缘关系也能进行通信;
2.信号
在Linux中也有信号,信号的作用类似于中断,因为信号随时都可能会发生,无法确定它什么时候到来,它是进程间唯一的异步通信机制。
常见的信号有,按键,定时器,错误等信号;
3.信号量
信号量是用来解决进程/线程间的同步与互斥的一种通信机制(PV操作)
P相当于申请资源,V相当于释放资源
4.消息队列
消息队列主要包括:创建、打开消息队列,添加消息,读取消息,控制消息
消息队列是内核地址空间中的内部链表,通过linux内核在各个进程直接传递内容,消息顺序地发送到消息队列中,并以几种不同的方式从队列中获得,每个消息队列可以用 IPC标识符 唯一地进行识别
消息队列克服了信号承载信息量少,管道只能承载无格式字符流。
5.共享内存
共享内存的实现主要为两个步骤:1,,创建共享内存,shmget() 2,映射共享内存,把这段内存映射到具体的进程空间中 shmat();