linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试2
2012-04-23 23:11
423 查看
唉。。。刚刚学了一个有名管道跟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,则打印出你的高矮胖瘦
其实打印这个不是目的,主要就是要学会怎么去创建一个共享内存和链接一个共享内存。
这只是对共享内存的访问,想要创建看另一篇博文!
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,则打印出你的高矮胖瘦
其实打印这个不是目的,主要就是要学会怎么去创建一个共享内存和链接一个共享内存。
这只是对共享内存的访问,想要创建看另一篇博文!
相关文章推荐
- linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试1
- linux基础编程 共享内存 通过消息队列实现同步 shmget
- Linux网络编程--使用epoll,共享内存技术实现高性能的聊天室程序
- linux基础编程 共享内存 通过消息队列实现同步 shmget
- Linux编程常用的函数(五) 共享内存
- 撸代码--类QQ聊天实现(基于linux 管道 信号 共享内存)
- linux 实现共享内存同步
- Linux 编程 共享内存
- Linux下用信号量实现对共享内存的访问保护
- Linux共享库的动态加载(附测试案例)
- Linux 基于IPC机制实现进程间的共享内存处理
- Linux编程实践——文件I/O缓冲区测试及cat简单实现
- Linux编程实践----共享内存的演示(IPC)
- linux下nginx+tomcat+msm+memcached实现session共享(测试)
- Linux 用pv操作和共享内存实现生产者与消费者机制
- linux高级编程基础系列:System V进程间通信(信号量、共享内存)
- linux实现共享内存同步的四种方法
- linux基础编程:进程通信之System V IPC:消息队列,信号量,共享内存
- linux系统编程--shmget() 建立共享内存
- Linux进程间通信 共享内存实现