linux C学习笔记02--共享内存(进程同步)

2024-06-11 10:18

本文主要是介绍linux C学习笔记02--共享内存(进程同步),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 system V下3中进程同步:共享内存(shared memory),信号量(semaphore)和消息队列(message queue)

调试了下午,终于调通啦! 运行./c.out 输出共享内存中的内容,运行 ./c.out arg1 对共享内存区进行修改,shell下输入ipcs -m 可以查看共享内存情况 ,-s 是信号量,-q 是消息队列

下面先贴上main的代码: 

#include <signal.h>        //head file of define signal
#include <pthread.h>
#include <static_lib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/mman.h>extern int create_shm(char **shmptr);
int main(int argc,char* argv[])
{//IPC share memorychar *shmptr;if(create_shm(&shmptr) == -1){printf("create_shm error \n");return -1;        }if(argc > 1){//do the second thing for share memorywhile(1){printf("input str to share memory:");gets(shmptr);}}else{memcpy(shmptr,"hello",5);while(1){sleep(2);printf("share memory is %s \n",shmptr);}}   return 0;
}

下面是共享内存创建的代码:

/*************************************************************************> File Name: share_memory.c> Author: hailin.ma> Mail: mhl2018@126.com > Created Time: Wed 27 May 2015 11:19:26 PM CST************************************************************************/#include<stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <errno.h>#define SHARE_MEM_KEY 26int create_shm(char **shmptr)
{int shmid;//if((shmid = shmget(IPC_PRIVATE,200,IPC_CREAT|IPC_EXCL|0666)) == -1)if((shmid = shmget(SHARE_MEM_KEY,200,IPC_CREAT|IPC_EXCL|0666)) == -1){perror("shmget");if(errno == EEXIST){shmid = shmget(SHARE_MEM_KEY,0,0);if(shmid == -1){perror("shmget2");return -1;}else{if((*shmptr = shmat(shmid,0,0666)) == (void*)-1){perror("shmat2");return -1;}else{return shmid;}}}else{return -1;}}if((*shmptr = shmat(shmid,0,0)) == (void*)-1){perror("shmat");return -1;}return shmid;
}

 运行效果:

05.29日增加了共享内存释放和删除:

int main(int argc,char* argv[])
{//IPC share memorychar *shmptr;int shmid;if((shmid =create_shm(&shmptr)) == -1){printf("create_shm error \n");return -1;        }if(argc > 1){//do the second thing for share memorywhile(1){printf("input str to share memory:");gets(shmptr);if(shmptr[0] == 'q')        //quit{shmdt(shmptr);            //disconnect to the share memory but will not dellect the memerybreak;}}}else{while(1){sleep(2);printf("share memory is: %s \n",shmptr);if(shmptr[0] == 'q'){shmdt(shmptr);shmctl(shmid,IPC_RMID,NULL);        //delete the share memerybreak;}}}
}

这篇关于linux C学习笔记02--共享内存(进程同步)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默