UNIX情形高级编程:System V 共享内存区
发布时间:2016-10-31 17:54:53  所属栏目: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获取。 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
