Unix网络编程-进程间通信---2、POSIX IPC 3、System IPC 简介比较

一、Posix IPC 

Posix函数汇总
创建、打开、删除、控制、操作  

二、System V IPC

SYSTEM IPC 和posix 有共同的三种IPC :消息队列、信号量、共享内存

1、IPC键---key_t键和ftok函数

(1)System V IPC使用key_t值作为他们的名字,通常是一个至少32位的整数;

(2)key_t ftok(const char * pathname, int id);

(3)函数把pathname导出的信息和id的低8位组合成一个整数IPC

(4)ftok实际是调用stat函数,然后组合三个值:①、pathname在文件系统中的信息(stat结构中的st_dev) ②、(stat结构中的st_ino) ③id的低八位,但是i不能位0

{
    struct stat status;
    stat(argv[1], &status);
    
    printf("st_dev: %lx, st_ino:%lx, key: %x\n", stat.st_dev, stat.st_ino, ftok(argv[1]), 0x57));
    
    exit(0);
}

(5)ipc_perm 结构

每一个消息队列内核维护一个定义在sys/msg.h头文件的结构体中;内核给每一个IPC对象维护一个信息结构体,其内容和内核给文件维护的信息类似;

struct{
        uid_t    uid;
        gid_t    gid;
        uid_t    cuid;
        gid_t    ugid;
        mode_t   mode;//读写权限
        ulong_t  seq;
        ket_t    key;//IPC_key
}

(6)创建ipc通道

创或者打开IPC对象都是通过int XXXget(key_t key, int oflag)的形式创建的,认识oflag:IPC_CREAT  IPC_EXCL

oflag == IPC_CREAT,------>只负责根据给出的信息创建,不检查是否存在-------------》后续可以 | 上9 (rwxrwxrwx) 个权限

oflag == IPC_CREAT | IPC_EXCL ---------->根据key来创建,如果已经存在返回错误-------------》后续可以 | 上9个权限

oflag == IPC_EXCL   没有意义-------------》后续可以 | 上9个权限

oflag == 无特殊标志,也可以创建,只需要检查key值-------------》后续可以 | 上权限

key == IPC_PRIVATE 创建一个唯一的IPC对象,(如果系统中的对象数目满了就错误)

大多数情况服务器会用前两种,客户端则不关心其中的任何标志

 

(7)调用xxxget函数之后

内核会为返回的fd创建一个ipc_perm 结构,权限信息存放在mode_t   mode;//读写权限

0400  MSG_R                 SEM_R            SHM_R 用户读权限

0200  MSG_W                SEM_A            SHM_W 用户写权限

0040  MSG_R >> 3         SEM_R >> 3    SHM_R >> 3

0020  MSG_W >> 3  ...

0004  MSG_R >> 6         SEM_R >> 6     SHM_R >> 6

0002  MSG_W >> 6 ...

(这一块需要好好补充)

 

(8)ipcs和ipcrm命令

由于不是用文件系统中路径名标识的,所以不能通过ls和rm查看;可以通过ipcs和ipcrm命令

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuckyDog0623

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值