进程间通信

本文深入探讨了消息队列和信号量的基本概念、函数用法及其在系统编程中的应用,包括如何使用msgget、msgsnd、msgrcv、semget、semop等核心API进行消息传递和信号控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息队列
    key_t ftok(char* pathname,char proj)    //获得键值
    返回文件名对应的键值。
    pathname:文件名、路径
    proj:项目名,不为0即可

    int msgget(key_t key,int msgflg)    //获取消息队列描述字
    key:键值,通过ftok获得
    msgflg:标志位    IPC_CREAT,IPC_EXCL,IPC_NOWAIT    例如 IPC_CREAT|0666;
    返回与键值对应的消息队列描述字
    
    int msgsnd(int msgid,struct msgbuf* msgp, int msgsz ,int msgflg) 
            //向消息队列中发送一条消息
    msqid    已打开的消息队列id
    msgp    存放消息的结构
        struct msgbuf
        {
            long mtype;        //消息类型,可以为int
            char mtext[1];    /消息数据的首地址,不一定是mtext[1]    ,
         }
    msgsz    消息数据长度
    msgflg    IPC_NOWAIT,当消息队列不够空间放要发送的消息时,指明msgsnd是否等待。
    消息收发的类型要一样
    int msgrcv(int msqid,struct msgbuf*msgp,int msgsz,long msgtyp,int msgflg)
        //从msqid代表的消息队列中读取一个msgtyp类型的消息,并把消息存储在msgp
        //指向的msgbuf结构中。成功读取一条消息后,队列中的这条消息将被删除。

    
信号量
    int semget(key_t key,int nsems, int semflg)
    key    键值,由ftok获得
    nsem    指定打开或新创建的信号灯集中将包含信号灯的数目
    semflg    标识,同消息队列一样

    int semop(int semid, struct sembuf*sops, unsigned nsops)
        struct sembuf{
            unsigned short sem_num;    //要操作的信号量在信号量集里的编号
                            //第一个编号为0
            short sem_op;    //1为释放
            short sem_flg;    //IPC_NOWAIT,操作不满足时,不阻塞,返回并设定错误信息
                        //IPC_UNDO    程序结束时,释放信号量,避免程序在异常情况下结束时
                        //未将锁定的资源解锁,造成资源永远锁定。
        }
        sops    是一个操作数组,表明要进行什么操作
        nsops    sops所指向的数组的元素个数
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值