博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试2
阅读量:2240 次
发布时间:2019-05-09

本文共 1313 字,大约阅读时间需要 4 分钟。

唉。。。刚刚学了一个有名管道跟signal()函数,有要学习一个叫什么共享内存的东西,真是忒让人不省心啊!

mygod,怎么这么多系统函数啊!

下面,我们就通过一个小小的案例来说明一下shem()函数的使用吧。

它所在头文件:

#include <sys/ipc.h>

#include <sys/shm.h>

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

对返回值及参数做一下简单的说明:

如果函数调用成功,则返回一个一个共享内存的id号,失败则返回-1

第一个参数是键值,通常通过ftok()函数多得,

第二个参数是设置共享内存的大小,可以自己一个1024的大小,也可以通过getpagesize()函数来获得一页的大小

第三个参数是权限位,可以设置内存的权限,如IPC_CREAT|IPC_EXCL|S_IRUSR| S_IWUSR| S_IRGRP|S_I

WGRP|S_IROTH|S_IWOTH,有不懂的权限,可以查看帮助手册哦!

如果要想连接访问一个共享内存,就必须知道内存的id号。

shemget()会返回一个内存的id号,其他的函数就可以通过对id号的操作来处理共享内存里面的数据啦!

亲,记得要导入相关文件哦!

下面看看第2个程序是怎么连接一个共享内存的吧!要深入理解每行代码哦!

#include<sys/types.h>

#include<sys/shm.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
int main()
{
 int shmid;
 int *addr;
 int h,w;
 float result;
 while(1)
 {
  int i=0,j=0;
  shmid=shmget(ftok("/etc/passwd",1001),getpagesize(),S_IRUSR| S_IWUSR| S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
  if(shmid==-1)
         {
                 perror("shmget error:");
                 exit(EXIT_FAILURE);
         }
         addr=shmat(shmid,0,0);
  j=*(addr+2);
  w=*(addr+1);
  h=*addr;
  result=w/(h*h/10000);
  if(i<j)
  {
   
   if(result>25)
   {
    printf("胖拉!\n");
    *(addr+2)=0;
   }
   else if(result<20)
   {
    printf("瘦啦!\n");
    *(addr+2)=0;
   }
   else
   {
    printf("正常!\n");
    *(addr+2)=0;
   }
  }

   shmdt(addr);

 }
}
为了实现反复循环的打印,我加了一个while语句,通过if做了一个条件的判断,如果i<j,则打印出你的高矮胖瘦

其实打印这个不是目的,主要就是要学会怎么去创建一个共享内存和链接一个共享内存。

这只是对共享内存的访问,想要创建看另一篇博文!

转载地址:http://raqbb.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>