Linux --进程间通信--共享内存
一、共享内存
共享内存是最高效的通信方式,因为不需要一个进程先拷贝到内核,另一个进程在存内核中读取。
二、 ipcs -m 查看共享内存
ipcrm -m 删除共享内存
三、主要函数
shmget 创建
shmctl 删除
shmat 挂接
shmdt 取消挂接
********* man 函数名 查看*****
四、代码实现
comm.h
1 #pragma once 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<unistd.h> 5 #include<sys/ipc.h> 6 #include<sys/shm.h> 7 #define _PATH_ "." 8 #define _PROJID_ 0x666 9 #define _SHM_SIZE_ 4096 10 int getShmget(); 11 int destoryShm(int shm_id); 12 char* at_shm(int shm_id); 13 int delete_Shm(char *addr);
comm.c
1 #include"comm.h" 2 int getShmget() 3 { 4 key_t key=ftok(_PATH_,_PROJID_); 5 6 int shmflg=IPC_CREAT |0666; 7 int shm_id=shmget(key,_SHM_SIZE_,shmflg); 8 if(shm_id<0) 9 { 10 perror("shmget"); 11 return -1; 12 } 13 return shm_id; 14 } 15 16 int destoryShm(int shm_id) 17 { 18 return shmctl(shm_id,IPC_RMID,NULL); 19 } 20 21 char* at_shm(int shm_id) 22 { 23 return (char*)shmat(shm_id,NULL,0); 24 } 25 int delete_Shm(char *addr) 26 { 27 return shmdt(addr); 28 }
client.c
1 #include"comm.h" 2 int main() 3 { 4 int shm_id=getShmget(); 5 char *addr=at_shm(shm_id); 6 int i=0; 7 for(;i<_SHM_SIZE_;i++) 8 { 9 addr[i ]='A'; 10 addr[i+1]='\0'; 11 sleep(1); 12 } 13 delete_Shm(addr); 14 return 0; 15 }
server.c
1 #include"comm.h" 2 int main() 3 { 4 int shm_id=getShmget(); 5 char * addr=at_shm(shm_id); 6 int i=0; 7 for(;i<_SHM_SIZE_;i++) 8 { 9 printf("%s\n",addr); 10 sleep(1); 11 } 12 delete_Shm(addr); 13 destoryShm(shm_id); 14 return 0; 15 }
运行结果
以上就是Linux --进程间通信--共享内存的内容,更多相关内容请关注PHP中文网(www.php.cn)!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

CentOS 和 Ubuntu 的关键差异在于:起源(CentOS 源自 Red Hat,面向企业;Ubuntu 源自 Debian,面向个人)、包管理(CentOS 使用 yum,注重稳定;Ubuntu 使用 apt,更新频率高)、支持周期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社区支持(CentOS 侧重稳定,Ubuntu 提供广泛教程和文档)、用途(CentOS 偏向服务器,Ubuntu 适用于服务器和桌面),其他差异包括安装精简度(CentOS 精

CentOS 已停止维护,替代选择包括:1. Rocky Linux(兼容性最佳);2. AlmaLinux(与 CentOS 兼容);3. Ubuntu Server(需要配置);4. Red Hat Enterprise Linux(商业版,付费许可);5. Oracle Linux(与 CentOS 和 RHEL 兼容)。在迁移时,考虑因素有:兼容性、可用性、支持、成本和社区支持。

CentOS 安装步骤:下载 ISO 映像并刻录可引导媒体;启动并选择安装源;选择语言和键盘布局;配置网络;分区硬盘;设置系统时钟;创建 root 用户;选择软件包;开始安装;安装完成后重启并从硬盘启动。

如何使用 Docker Desktop?Docker Desktop 是一款工具,用于在本地机器上运行 Docker 容器。其使用步骤包括:1. 安装 Docker Desktop;2. 启动 Docker Desktop;3. 创建 Docker 镜像(使用 Dockerfile);4. 构建 Docker 镜像(使用 docker build);5. 运行 Docker 容器(使用 docker run)。

Docker利用Linux内核特性,提供高效、隔离的应用运行环境。其工作原理如下:1. 镜像作为只读模板,包含运行应用所需的一切;2. 联合文件系统(UnionFS)层叠多个文件系统,只存储差异部分,节省空间并加快速度;3. 守护进程管理镜像和容器,客户端用于交互;4. Namespaces和cgroups实现容器隔离和资源限制;5. 多种网络模式支持容器互联。理解这些核心概念,才能更好地利用Docker。

Docker 进程查看方法:1. Docker CLI 命令:docker ps;2. Systemd CLI 命令:systemctl status docker;3. Docker Compose CLI 命令:docker-compose ps;4. Process Explorer(Windows);5. /proc 目录(Linux)。

VS Code 系统要求:操作系统:Windows 10 及以上、macOS 10.12 及以上、Linux 发行版处理器:最低 1.6 GHz,推荐 2.0 GHz 及以上内存:最低 512 MB,推荐 4 GB 及以上存储空间:最低 250 MB,推荐 1 GB 及以上其他要求:稳定网络连接,Xorg/Wayland(Linux)

Docker镜像构建失败的故障排除步骤:检查Dockerfile语法和依赖项版本。检查构建上下文中是否包含所需源代码和依赖项。查看构建日志以获取错误详细信息。使用--target选项构建分层阶段以识别失败点。确保使用最新版本的Docker引擎。使用--t [image-name]:debug模式构建镜像以调试问题。检查磁盘空间并确保足够。禁用SELinux以防止干扰构建过程。向社区平台寻求帮助,提供Dockerfile和构建日志描述以获得更具体的建议。
