LinuxIPC及进程间的锁机制

Linux下IPC(Posix)相关知识点,就把这个作为18年第一更吧。IPC的设计理念在很多地方都用的上(软件上几个模块需要数据交互,该如何选择交互方案,该如何去实现交互),所以在系统的过一遍吧,顺便在做个导图,加深印象

IPC MindMap

进程间的锁机制

  • 共享内存的实现:
    进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程

1、int shmget(key_t key, size_t size, int shmflg);//创建共享内存, 返回共享内存标识id(shmid)
key:IPC_PRIVATE表示创建一个新的共享内存,一般固定一个key值,方便其他进程获取
size:指定共享内存容量,以字节为单位
shmflg:读写权限,例如0666代表root,user,other都具有读写的权限

2、void shmat(int shmid, const void shmaddr, int shmflg);//绑定共享内存区,共享内存区域的首地址
shmid:先前分配到的共享内存标识id
shmaddr:指定共享内存绑定到当前进程中的地址位置,通常为0,表示让系统来选择共享内存位置
shmflg:通常为0

3、int shmdt(const void *shmaddr);//解绑共享内存
shmaddr:shmat返回的shmaddr的地址