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

Linux10-共享队列

1.4共享队列

1.4.1共享内存

        内存映射:避免数据的反复读写拷贝,提高了效率。

        内存管理单元MMU:将物理内存与虚拟内存之间架起映射关系


1.创建共享内存                       

int shmget(key_t key,size_t size,int shmflg);

2.建立共享内存和用户空间的映射关系void *shmat(int shmid,const void *shmaddr,int shmflg);

3.写数据

4.读数据
5.解除映射关系int shmdt(const void *shmaddr)
6.删除共享内存int shmctl(int shmid,int cmd,struct shmid_ds *buf)

int shmget(key_t key,size_t size,int shmflg);

功能:根据key值创建共享内存

参数:

        key:IPC的key值

key_t ftok(const char *pathname,int proj_id);

功能:获取一个IPC的key值

参数:

        pathname:路径

        proj_id:项目ID

返回值:

成功:key

失败:-1

        size:共享内存大小(向上取整到页大小的整数倍)4096 PAGE_SIZE

        shmflg:对对象内存的操作  IPC_CREAT | 0664

返回值:

        成功:返回共享内存的ID

        失败:-1

void *shmat(int shmid,const void *shmaddr,int shmflg);
功能:建立内存映射

参数:

        shmid:共享内存的ID

        shmaddr:映射的用户首地址(NULL让操作系统自己去找,返回空间首地址)

        shmflg:!SHM_RDONLY(可读可写)

返回值:

        成功:映射的用户空间首地址

        失败:NULL

int shmdt(const void *shmaddr)
功能:解除用户映射关系,释放用户空间

参数:

        shmaddr:映射的用户首地址(NULL让操作系统自己去找,返回空间首地址)

返回值:

        成功:0

        失败:-1

int shmctl(int shmid,int cmd,struct shmid_ds *buf)
功能:控制共享内存

参数:

        shmid:共享内存的ID

       cmd:IPC_RMID:删除

        buf:NULL不需要使用

返回值:

        成功:0

        失败:-1

指令:ipcs -a查看共享内存 的信息

           ipcrm -s 删除信号量集

           ipcrm -m 删除共享内存

1.5消息队列

获取一个IPC通信的key值key_t ftok(const char *pathname,int proj_id);
创建消息队列int msgget(key_t key,int msgflg);
发送消息int msgsnd(int msqid,void  *msgp,size_t msgsz,int msgflg);  
接受消息ssize_t msgrcv(int msqid,void *msgp,size_t msgsz,long msgtyp,int msgflg);
删除消息队列int msgctl(int msqid,int cmd,struct msqid_ds *buf);
key_t ftok(const char *pathname,int proj_id);
功能:获取ipc的key值

参数:

       pathname:路径

       proj_id:项目ID

返回值:

        成功:key

        失败:-1

int msgget(key_t key,int msgflg);
功能:根据key值创建一个消息队列

参数:

       key:ipc的key值

      msgflg:标志位   IPC_CREAT |0664

返回值:

        成功:消息队列的id号

        失败:-1

int msgsnd(int msqid,void  *msgp,size_t msgsz,int msgflg);  
功能:向消息队列中发送消息

参数:

       msqid:消息队列的ID

        msgp:要发送的消息的结构体首地址

                struct msgbu{

                        long mtype;

                        char mtext[msgsz];

                };

        msgsz:消息体中正文内容大小

        msgflg:标志位:默认0

struct msgbuf msg;

msg.mtype =(大于0的值);

fgets(msg.mtext,sizeof(msg.mtext),stdin);

msgsnd(msgid,&msg,sizeof(msg.mtext),0);

返回值:

        成功:0

        失败:-1

ssize_t msgrcv(int msqid,void *msgp,size_t msgsz,long msgtyp,int msgflg);
功能:从消息队列接受消息

参数:

        msqid:消息队列的ID

        msgp:要存放接收的消息的结构体首地址

                struct msgbu{

                        long mtype;

                        char mtext[msgsz];

                };

        msgsz:接受消息体中正文内容大小

        msgtyp:消息的类型

        msgflg:标志位:默认0

返回值:

        成功:消息队列的id号

        失败:-1

1.6信号灯

不同主机进程间通信:

1.7网络套接字

文件描述符

客户端:

        socket():创建网络套接字

        sendto():发送数据包

        recvfrom():接受数据包

        close():关闭套接字

int socket(int domain,int type,int protocol)
功能:创建一个通信套接字

参数:

domain:ip层协议族

        AF_INET  IP4

        AF_INET6  IP6

type:传输层使用的协议类型

        SOCK_DGRAM UDP

        SOCK_STREAM TCP

protocol:

        0按照默认协议返回值

返回值:

成功:返回套接字

失败:-1

size_t  sendto(int sockfd,const void *buf,sizeof_t len,int flags,const struct sockaddr *dest_addr,socklen_t addrlen);
功能:向通信套接字发送数据

参数:

sockfd:套接字

buf:要发送的数据的首地址

len:发送的数据的大小

flags:默认方式 0

dest_addr:保存接受方地址信息的指针

.sin_port = htons(50000)//

.sin_addr.s_adde =inet_addr("ip地址")//将地址转为un int  inet_ntoa(int 转char)

addrlen:接收方地址变量的大小

返回值:

成功:实际发送的字节数

失败:-1

服务端:

        socket()

        bind():绑定服务器当前主机的身份(IP+PORT)

        recvfrom():接收

        sendto():发送

        close():关闭

bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen)
功能:绑定当前主机的ip和进程的端口

参数:

 sockfd:套接字

addr:自己信息的地址

addrlen:地址信息的大小

返回值:

成功:0

失败:-1

 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
功能:从套接字接受数据

参数:

sockfd:套接字

buf:存储接收到的数据的位置的首地址

len:期待接收到的字节数

flags::默认方式:0
src_addr:送发地址信息的首地址

addrlen:送发方地址变量的大小

返回值:

成功:返回接收到的字节数

失败:-1

相关文章:

  • android智能指针android::sp使用介绍
  • 工程化与框架系列(4)--Webpack 高级配置详解
  • 从ETL到数仓分层:大数据处理的“金字塔”构建之道
  • 【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速)
  • Vue程序下载
  • 大白话TypeScript第七章TypeScript 与不同技术栈的深度融合及拓展应用
  • 【Cadence仿真学习笔记】ADS Dynamic Link报错model is reserved的解决办法
  • vue3在使用ts为模板引用标注类型时,vue3.5+版本有了全新写法
  • conda怎么迁移之前下载的环境包,把python从3.9升级到3.10
  • 非关系型数据库和关系型数据库的区别
  • 2025年度福建省职业院校技能大赛高职组“信息安全管理与评估”赛项规程样题模块二
  • Nginx系列06(Nginx 缓存配置、SSL/TLS 配置)
  • DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP
  • UE5 Slate类的基础创建
  • 【docker】docker swarm lock和unlock的区别,以及旧节点重启的隐患
  • JavaWeb基础专项复习5——请求对象和响应对象request and response
  • 【江科大STM32】TIM输出比较-PWM功能(学习笔记)
  • 小识ThreadLocal 用法
  • 初学STM32之简单认识IO口配置(学习笔记)
  • 车载系统SRAM存储方案
  • 辽宁建设厅勘察设计网站/b站在哪付费推广
  • 郑州市疫情防控指挥部电话号码/朝阳区seo
  • 茂名 网站建设/网上推广产品怎么做
  • 自己设计logo网站/seo云优化外包
  • 中国著名b2b电子商务网站/百度词条
  • 哪家公司做网站/网址最全的浏览器