您的位置:首页 > 运维架构 > Linux

linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试1

2012-04-23 23:13 399 查看
下面,我们就通过一个小小的案例来说明一下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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: