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

猜你喜欢

转载自blog.csdn.net/weixin_45981798/article/details/129768178