4、操作系统——进程间通信(2)(system V-IPC介绍)
目录
一、system V-IPC常识
1、key和ID
2、文件描述符
3、函数(ftok)
ftok产生IPC对象的健值key(类似文件路径)
4、例子
5、使用命令查看或删除当前系统中的IPC对象
一、system V-IPC常识
1、key和ID
(1)IPC对象的操作接口都比较类似,用key的健值来唯一标识,并且都是“持续性”资源,即创建后不会因为进程退出而消失,会持续存在,删除时要用特殊的函数或者命令
(2)key类似于文件的路径名(唯一)
ID类似于文件的描述符(可变)
每打开一次IPC对象,就会获得一个表征这个对象的ID(相当文件IO中的文件描述符),再使用这个ID操作对象。
2、文件描述符
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
int fd = open("test.py", O_RDONLY);
if (fd == -1) {
return -1;
}
printf("test.py fd = %d \n", fd);
close(fd);
return 0;
}
上述中fd为文件描述符
3、函数(ftok)
ftok产生IPC对象的健值key(类似文件路径)
4、例子
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
int main(int argc, char const *argv[])
{
key_t key = ftok("./", 1 );
printf("key:%d\n" , key );
return 0;
}
5、使用命令查看或删除当前系统中的IPC对象
查看消息队列:ipcs -q
查看共享内存:ipcs -m
查看信号量:ipcs -s
查看所有的 IPC 对象:ipcs -a
删除指定的消息队列:ipcrm -q MSG_ID 或者 ipcrm -Q msg_key
删除指定的共享内存:ipcrm -m SHM_ID 或者 ipcrm -M shm_key
删除指定的信号量:ipcrm -s SEM_ID 或者 ipcrm -S sem_key