IPC进程间通信_顺其自然~的博客-CSDN博客_ipc通信
1. 进程间通信(IPC)——管道
(36条消息) 进程间通信(IPC)——管道_牵猫散步的鱼儿的博客-CSDN博客_ipc管道
(37条消息) 进程间通信(IPC):管道_♚陌上花开的博客-CSDN博客_ipc 管道通讯
2.IPC之FIFO(有名管道)详解
(36条消息) IPC之FIFO(有名管道)详解_带鱼兄的博客-CSDN博客
(36条消息) 进程间通信(IPC)——FIFO(命名管道)_牵猫散步的鱼儿的博客-CSDN博客_进程fifo
3.进程间通信( IPC):消息队列
(36条消息) 进程间通信( IPC):消息队列_♚陌上花开的博客-CSDN博客_ipc 消息队列
4.信号量--System V信号量 与 Posix信号量
信号量--System V信号量 与 Posix信号量_51CTO博客_posix信号量
(37条消息) 进程间通信(IPC):信号量_♚陌上花开的博客-CSDN博客_ipcs 信号量
5.共享内存
(36条消息) 共享内存_shmget_付康为的博客-CSDN博客_shmget
(37条消息) 进程间通信(IPC):共享内存_♚陌上花开的博客-CSDN博客_ipc共享内存
shmctl
int shmctl(int shmid,int cmd,struct shmid_ds *buf)
shmid:共享存储段的id
cmd:一些命令
IPC_STAT 得到共享内存的状态
IPC_SET 改变共享内存的状态
IPC_RMID 删除共享内存
IPC_RMID 命令实际上不从内核删除一个段,而是仅仅把这个段标记为删除,实际的删除发生在最后一个进程离开这个共享段时。
请注意,共享内存不会随着程序结束而自动消除,要么调用shmctl删除,要么自己用手敲命令去删除,否则永远留在系统中。
使用命令:
ipcs -m //先通过查询所有的共享内存的id
ipcrm shm shmid //删除指定共享内存区
五种通讯方式总结
1.管道:速度慢,容量有限,只有父子进程能通讯
2.FIFO:任何进程间都能通讯,但速度慢
3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
4.信号量:不能传递复杂消息,只能用来同步
5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存。