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