本文共 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/