linux下c获系统内存的函数,linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试2...

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

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

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

它所在头文件:

#include

#include

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号的操作来处理共享内存里面的数据啦!

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

0818b9ca8b590ca3270a3433284dd417.png

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

#include

#include

#include

#include

#include

#include

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

{

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值