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

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

下面,我们就通过一个小小的案例来说明一下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号的操作来处理共享内存里面的数据啦!

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

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

/*

* filename:shm
*
*/
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/stat.h>
#include<sys/shm.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{
 int shmid;
 int *addr;
 int h=0,w=0;
 shmid=shmget(ftok("/etc/passwd",1001),getpagesize(),IPC_CREAT|IPC_EXCL|S_IRUSR| S_IWUSR| S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
 if(shmid==-1)
 {
  perror("shmget error:");
  //exit(EXIT_FAILURE);
 }
 while(1)
 {
  addr=shmat(shmid,0,0);
  printf("please input your infornation:\n");
  scanf("%d%d",addr,addr+1);
  *(addr+2)=1;
  printf("%d",*(addr+2));
  shmdt(addr);
 }
return 0;
}

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

你可能感兴趣的文章
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
【Linux】进程的理解(二)
查看>>
【Linux】vim的简单配置
查看>>
【C++】构造函数、析构函数抛出异常的问题
查看>>
【C++】关于vector<bool>
查看>>
【操作系统】内存碎片产生原因及终极解决办法
查看>>
幂等性验证思想
查看>>
DB理论--数据存储方式
查看>>
PB协议的说明与使用
查看>>
什么是TPS,什么是QPS,区别是什么?
查看>>
git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
查看>>
arraylist扩容时机java8
查看>>
logback中additivity的理解
查看>>