加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:System V 共享内存区

发布时间:2016-09-27 17:03:35 所属栏目:Unix 来源:站长网
导读:副标题#e# 共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存

6.shmrnid程序(shmrmid.c)

如下给出的只是以一个IPC_RMID命令调用shmctl,以便从系统中删除一个共享内存区。

#include "unpipc.h"  
int main(int argc,char ** argv)  
{  
  int id;  
  if(argc != 2)  
   err_quit("usage: shmrmid<pathname>");  
      
  id = shmget(ftok(argv[1],0),0,SVSHM_MODE);  
  shmctl(id,IPC_RMID,NULL);  
  exit(0);  
}

7.shmwrite程序(shmwrite.c)

下面给出了shmwrite.c程序,它往一个共享内存区中写入一个模式:0.1.2........254.255.0.1等等。

#include "unpipc.h"  
int main(int argc,char **argv)  
{  
  int i,id;  
  struct shmid_ds buff;  
  unsigned char *ptr;  
      
  if(argc != 2)  
    err_quit("usage: shmwrite <pathname>");  
      
  id = shmget(ftok(argv[1],0),0,SVSHM_MODE);  
  ptr = shmat(id,NULL,0);  
  shmctl(id,IPC_STAT,&buff);  
      
  /*set: ptr[0] = 0,ptr[1] = 1,etc.*/
  for(i = 0;i < buff.shm_segsz;i++)  
      *ptr++ = i%256;  
  exit(0);  
}

11-13   使用shmget打开所指定的共享内存区后由shmat把它附接到当前进程的地址空间。其大小通过以一个IPC_STAT命令调用shmctl取得。

16-17   往该共享内存区中写入给定的模式。

8.shmread程序(shmread.c)

下面给出的代码验证shmwrite写入的模式。

#include "unpipc.h"  
int main(int argc,char** argv)  
{  
  int i,id;  
  struct shmid_ds buff;  
  unsigned char c,*ptr;  
      
  if(argc != 2)  
    err_quit("usage: shmread <pathname>");  
      
  id = shmget(ftok(argv[1],0),0,SVSHM_MODE);  
  ptr = shmat(id,NULL,0);  
  shmctl(id,IPC_STAT,&buff);  
      
  /*check that ptr[0] = 0,ptr[1] = 1,etc.*/
  for(i = 0;i < buff.shm_segsz;i++)  
    if((c = *ptr++) != (i%256))  
       err_ret("ptr[%d] = %d",i,c);  
  exit(0);  
}

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

11-13   打开并附接所指定的共享内存区。其大小通过以一个IPC_STAT命令调用shmctl获取。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读