Linux系统编程-IPC通信-消息队列

1.回顾多线程编程

pthread_t mythread1;

void *Thread1(void *arg)
{

}

//创建线程
//             线程ID      线程属性默认NULL   线程函数指针   线程参数
pthread_create(&mythread1,       NULL,         Thread1,    NULL);

//等待线程结束
//           线程ID   线程返回值不关心可写0或NULL
pthread_join(mythread1,0);

2.创建消息队列

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

//消息队列结构体   注:第一个变量必须为long类型 - 消息队列的ID

typedef struct{
    long type;
    unsigned char buff[128];
}MSG;

使用消息队列需对消息队列的ID及ftok有一定了解


        消息队列的ID: 各个进程或线程使用同一个消息队列时  必须保证ID一致
        ftok(把一个已存在的路径名和一个整数标识符转换成IPC键值)

3.消息队列的发送

函数原型

int msgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);

参数:

消息队列ID 

消息队列结构体

数据长度: 除了long类型的长度,即上述buff的长度

msgflg :msgflg=IPC_NOWAIT表示队列满不等待,返回EAGAIN错误。 msgflg = 0等待

//ftok参数   文件名  proj_id
/*
有关该函数的三个常见问题:
1.pathname是目录还是文件的具体路径,是否可以随便设置
2.pathname指定的目录或文件的权限是否有要求
3.proj_id是否可以随便设定,有什么限制条件
解答:
1、ftok根据路径名,提取文件信息,再根据这些文件信息及project ID合成key,该路径可以随便设置。
2、该路径是必须存在的,ftok只是根据文件inode在系统内的唯一性来取一个数值,和文件的权限无关。
3、proj_id是可以根据自己的约定,随意设置。这个数字,有的称之为project ID; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值