做网站如何添加视频,wordpress调用文章标签,网站搭建公司官网,阿里云网站空间操作系统内核中采用一个链式队列管理消息,每个节点就对应一个消息#xff1a; 操作系统规定了单个消息的数据长度不能超过8k(8192个字节)#xff0c;一个消息队列的表长(节点数)最多不超过256个 利用消息队列进行通信的特点#xff1a;
1. 全双工#xff1a;任何参与通信的…操作系统内核中采用一个链式队列管理消息,每个节点就对应一个消息 操作系统规定了单个消息的数据长度不能超过8k(8192个字节)一个消息队列的表长(节点数)最多不超过256个 利用消息队列进行通信的特点
1. 全双工任何参与通信的进程均可以向消息队列中发送消息(创建并入队一个新节点)也均可以从消息队列中接收消息(出队一个消息并读取该消息的数据)2. 报式传输一个被接收下来的消息如果其数据没有被一次读完剩余数据会被丢弃3. 发送、接收消息的函数阻塞还是非阻塞由两个函数的参数决定 相关接口函数 显然消息队列适用于消息数据长度定长或最大不超过某值的情况 示例代码
my_msg.h
#ifndef MY_MSG_H
#define MY_MSG_H#include stdio.h
#include stdlib.h
#include string.h
#include sys/types.h
#include sys/ipc.h
#include sys/msg.hstruct my_msg{int type; // 消息类型char buf[120];
};#endif
send.c
#include my_msg.hint main(int argc,char *argv[]){key_t key;int id -1;struct my_msg msg;int ret 0;key ftok(./send.c,6); // ftok()id msgget(key,IPC_CREAT | 0666); // msgget(),IPC_CREATif(id 0){ //失败printf(msgget failed\n);return 1;}msg.type 99;strcpy(msg.buf,hello);ret msgsnd(id,msg,6,0); // msgsnd()if(ret){printf(msgsnd failed\n);return 2;}return 0;
}recv.c
#include my_msg.hint main(int argc, char *argv[]){key_t key;int id -1;struct my_msg msg;int ret 0;key ftok(./send.c,6); // ftok()id msgget(key,IPC_CREAT | 0666); // msgget()if(id 0){printf(magget failed\n);return 1;}ret msgrcv(id,msg,20,0,0); // msgrcv()if(ret 0){printf(msgrsv failed\n);return 2;}printf(%s\n,msg.buf);return 0;
}输出