当前位置: 首页 > news >正文

网站建设人群定位站长工具无忧

网站建设人群定位,站长工具无忧,网页设计与制作源代码,python编程快速上手目录 消息队列 创建消息队列 删除消息队列 发送消息和接收 消息队列 消息队列就是一个消息的列表,进程可以在消息队列中添加消息和的读取消息 消息队列具有FIFO的特性,具有无名管道与有名管道各自的优势,可以支持任意两个进程的进程间通讯…

目录

消息队列

创建消息队列

删除消息队列

发送消息和接收


消息队列

消息队列就是一个消息的列表,进程可以在消息队列中添加消息和的读取消息
消息队列具有FIFO的特性,具有无名管道与有名管道各自的优势,可以支持任意两个进程的进程间通讯

就可以理解为打电话时,双方专属的通道

创建消息队列

创建消息队列调用 msgget 函数。消息队列需要生成密钥,理解为创建独一的电话线

函数头文件
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

函数原型
int msgget(key_t key, int msgflg);
函数功能
获取System V消息队列标识符
[得到消息队列标识符或创建一个消息队列对象并返回消息队列标识符]
函数参数
key:由ftok函数合成
msgflg:消息队列标志
     [0:取消息队列标识符,若不存在则函数会报错]
     IPC_CREAT 创建标志
     (如果内核中不存在键值与key相等的消息队列,则新建一个消息队列;如果存在这样的消息队
列,返回此消息队列的标识符)
     [IPC_CREAT|IPC_EXCL: 如果消息队列存在,则报错, errno设置为EEXIST]
     权限控制标志
     IPC_CREAT | 0666

函数返回值
成功:返回消息队列id
失败:返回-1,并设置errno

代码:

#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define PATHNAME "."
#define PROJ_ID 106
int main()
{key_t key = ftok(PATHNAME,PROJ_ID);if(key==-1){perror("ftok");exit(EXIT_FAILURE);}int msgid = msgget(key,IPC_CREAT | 0664);if(msgid == -1){perror("msgget");exit(EXIT_FAILURE);}printf("msgid=%d\n",msgid);return 0;
}

删除消息队列

删除消息队列需要调用 msgctl 函数

函数原型
int msgctl(int msqid, int cmd, struct msqid_ds *buf);

函数参数
msqid:消息队列 id
cmd:命令字
 IPC_STAT:获取消息队列属性
 IPC_SET:设置消息队列属性
 IPC_RMID:删除消息队列,用此命名时,第三个参数为NULL
buf:消息队列属性结构体对象指针

int msgid = msgget(key,IPC_CREAT | 0664);if(msgid == -1){perror("msgget");exit(EXIT_FAILURE);}printf("msgid=%d\n",msgid);// 删除消息队列int ret = msgctl(msgid,IPC_RMID,NULL);if(ret == -1){perror("msgctl");exit(EXIT_FAILURE);}printf("delete msg successful.\n");

发送消息和接收

发送消息队列需要调用 msgsnd 函数

函数原型
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

msqid:消息队列ID
 msgp:消息结构体指针
 msgsz:消息内容的长度
 msgflg:消息队列标志,默认可以填0,IPC_NOWAIT,可以设置非阻塞

// 发送消息struct msgbuf msg;struct msgbuf* p_msg=&msg;p_msg->mtype=MSG_TYPE;strcpy(p_msg->msgtext,"Hello,first msg.");int ret = msgsnd(msgid,(const void*)p_msg,strlen(p_msg-
>msgtext)+1,0);

 

接收消息调用 msgrcv 函数

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

msqid:消息队列id
 msgp:消息结构指针
 msgsz:最大读取的字节数
 msgtyp:消息类型
 msgflg:消息队列标志,默认可以填0,IPC_NOWAIT,可以设置非阻塞

//接收消息struct msgbuf msg;struct msgbuf* p_msg=&msg;ssize_t rbytes = msgrcv(msgid,(void*)p_msg,MSG_SZ,MSG_TYPE,0);

 

 共享内存

什么是共享内存

共享内存是将分配的物理空间直接映射到进程的用户虚拟地址空间中,减少数据在内核空间缓存
共享内存是一种效率较高的进程间通讯的方式

在 Linux 系统中通过 ipcs -m 查看所有的共享内存

 创建共享内存

创建共享内存调用 shmget() 函数

函数原型
int shmget(key_t key, size_t size, int shmflg);
函数功能
创建一个共享内存,并返回ID
函数参数
 key:由 ftok() 函数返回
 size:共享内存的大小

shmflg:共享内存标志

#define PATH_NAME "."
#define PROJ_ID 110
#define SHM_SZ 1024
int main()
{key_t key = ftok(PATH_NAME,PROJ_ID);if(key == -1){perror("ftok");exit(EXIT_FAILURE);}int shmid = shmget(key,SHM_SZ,IPC_CREAT|0644);

共享内存的删除

删除共享内存调用shmctl函数

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

函数功能
共享内存控制函数,功能由具体的功能命令字决定

shmid:共享内存id
 cmd:控制命令字
 IPC_STAT:获取消息队列属性
 IPC_SET:设置消息队列属性
 IPC_RMID:删除消息队列属性,用此命名时,第三个参数为NULL
 buf:共享内存属性结构体指针

#define PATH_NAME "."
#define PROJ_ID 110
#define SHM_SZ 102
int main()
{
key_t key = ftok(PATH_NAME,PROJ_ID);if(key == -1){perror("ftok");exit(EXIT_FAILURE);}int shmid = shmget(key,SHM_SZ,IPC_CREAT|0644);if(shmid==-1){perror("shmget");exit(EXIT_FAILURE);}return 0;
}

共享内存映射与解除映射

共享内存映射调用shmat函数

void *shmat(int shmid, const void *shmaddr, int shmflg);

函数功能
将进程地址空间映射到共享内存上
函数参数
shmid:共享内存id
shmaddr:指定映射到进程地址空间的起始地址,指定为NULL时,由系统选择映射的地址
shmflg:共享内存标志,一般设置为0

解除共享映射调用 shmdt 函数

int shmdt(const void *shmaddr);

函数功能解除进程地址空间与共享内存的映射

函数参数

shmaddr:映射地址空间的起始地址

//共享内存映射void* addr = shmat(shmid,NULL,0);if(addr == (void*)-1){perror("shmat");exit(EXIT_FAILURE);}char buf[1024]={0};memcpy(buf,addr,10);printf("share memory content:%s\n",buf);shmdt(addr); // 解除绑定   

http://www.yayakq.cn/news/784509/

相关文章:

  • 做虚拟网站要花多少钱百度推广工作好干吗
  • 广州h5网站制作公司网站内容优化方法
  • 自动刷网站关键字排行画流程图的网站
  • 网站建设所需的软件网络服务机构
  • 海会网络做的网站怎么做优化wordpress加载谷歌
  • 网站首页原型图怎么做外包公司做的网站怎么改密码
  • 营销网站制作设计网址大全最新版
  • 做冰淇淋生意网站网络安全管理平台
  • 有没有做微信的动态图网站wordpress 老萨
  • 广东网站建设企业网站开发的形式有( )
  • 设计开发计划书网站优化的优势
  • 茶的网站制作wordpress showcase
  • 深圳网站备案点dw网页制作怎么改字体大小
  • 四川定制网站建设wordpress 博客 知名
  • 东莞外贸公司建网站重庆seo教程搜索引擎优化
  • 闵行做网站费用什么是网站风格
  • 网站制作找哪个wordpress会员制
  • 网站建设找a金手指汉川市城乡建设局网站
  • 宝盒官方网站wordpress分类列表去掉分类目录
  • 淘宝客做网站备注怎么写的wordpress采集生成用户插件
  • 济南公司网站建设公司排名钢结构
  • 网站建设防火墙级别要求网站建设用哪种语言
  • 榆林国贸网站建设搜索引擎优化的工作原理
  • 基础很差去公司做网站怎样在拼多多平台上卖货
  • 网站定制案例微安电力做动图为所欲为的网站
  • 一个做智能化的网站有哪些深圳专业网络营销外包公司
  • 网站的seo优化怎么做班级的网站设计怎么做
  • 室内设计效果图怎么做南京网站排名优化费用
  • 深圳专业网站公司如何制作宣传小视频
  • 在哪个网站上做简历网站推广费用一般多少钱