linux高级学习8

2024-09-07 06:28
文章标签 linux 学习 高级

本文主要是介绍linux高级学习8,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

24.9.4学习目录

  • 一.消息队列
    • 1.消息队列API
  • 二.mmap存储映射
    • 1.mmap的API

一.消息队列

消息队列存放在内存中,有内核维护
消息队列特点:

  • 消息队列中的消息是有类型的
  • 消息是有格式的
  • 消息队列可以实现消息的随机查询,编程时可以按照消息的类型读取
  • 允许一个或者多个进程向其写入或读取
  • 当从消息队列中读取消息后,消息会被删除
  • 每个消息队列都有一个唯一的消息队列标识符
  • 只有内核重启或人工删除消息队列时,消息队列才会被删除

1.消息队列API

(1)获取系统的唯一的key值
提供IPC通信机制需要一个key值,通过key值就可以在系统中获取一个唯一的消息队列标识符,key值可以认为指定,也可以通过ftok函数获取

#include<sys/types.h>
#include<sys/ipc.h>
//参数为路径名pathname,和项目ID,proj_id
key_t ftok(const char *pathname,int proj_id)

(2)创建消息队列

#include <sys/msg.h>
//通过key值和msgflg创建消息队列,当key值相同返回的消息队列的标识符就相同
int msgget(key_t key,int msgflg);

msgflg的取值:
IPC_CREAT:创建消息队列
IPC_EXCL:检测消息队列是否存在
位或权限位:设置消息队列的访问权限,格式和open函数的mode_t相同(即为0666等)

(3)查看消息队列

//在控制界面输入
ipcs -q

(4)删除消息队列

ipcrm -q 队列ID

(5)消息队列的的信息格式

typedef struct 名字
{//消息类型,必须为第一个,并且类型也是为longlong mtype;//消息正文char mtext[100];.........
}别名;

(6)发送消息

#include <sys/msg.h>
int msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflg);

msqid:消息队列标识符
msgp:待发送消息结构体的地址
msgsz:消息正文的字节数(通过其来获取sizeof(结构体名)- sizeof(long))
msgflg:函数的控制属性
   0:msgsnd调用阻塞直到条件满足为止
   IPC_NOWAIT:若消息没有立即发送则调用该函数的进程会立即返回

(7)接受消息

#include <sys/msg.h>
ssize_t msgrcv(int msqid,void *msgp,size_t msgsz,long msgtyp,int msgflg);

msqid:消息队列的标识符
msgp:存放消息结构体的地址
msgsz:消息正文的字节数
msgtyp:消息的类型,当有多个相同类型的消息,采用先进先出原则
  msgtyp = 0:返回队列中的第一个消息
  msgtyp > 0:返回队列中消息类型为msgtyp的消息
  msgtyp < 0:返回队列中消息类型小于或者等于msgtyp的消息,如果消息有多个,则取类型最小的消息
msgflg:函数的控制属性,只有0、MSG_NOERROR和IPC_NOWAIT

(8)消息队列的控制

#include <sys/msg.h>
int msgctl(int msqid,int cmd,struct msqid_ds *buf);

cmd:函数功能的控制
buf:msqid_ds数据类型的地址,用于存放或更改消息队列的属性
cmd:函数功能的控制
  IPC_RMID:删除消息队列
  IPC_STAT:将消息队列相关的数据结构中的值,存放到buf指向的结构中
  IPC_SET:将buf指向的值复制给消息队列

二.mmap存储映射

其是将磁盘文件与程序中一个缓冲区进行映射,对缓冲区进行操作即相当于对磁盘文件进行操作,其使用地址(指针)完成I/O操作

1.mmap的API

(1)建立映射区

#include <sys/mman.h>
//成功返回映射区的首地址
void *mmap(void *addr,size_t length,int prot,int flags.int fd,off_t offset);

addr:地址,填写null
length:映射区的长度,要与磁盘文件相同
prot:权限,有PORT_READ(可读)、PROT_WRITE(可写)
flags:标志位,有MAP_SHARED(共享的)对映射区的修改会影响文件、MAP_PRIVATE(私有的)
fd:文件描述符
offset:指定其偏移量

(2)拓展文件大小
因为一个新打开的文件是没有大小,这会导致映射区无法写入

//path为拓展的文件,length为需拓展的大小
int truncate(const char *path,off_t length);

(3)释放映射区域

只能释放本进程中的映射

int munmap(void *addr,size_t length);

addr:为映射区的首地址
length:为映射区的长度

这篇关于linux高级学习8的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144314

相关文章

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py