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

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

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

16-18   验证由shmwrite写入的模式。

示例代码:

#include <stdlib.h>    
#include <stdio.h>    
#include <string.h>    
#include <errno.h>    
#include <unistd.h>    
#include <sys/stat.h>    
#include <sys/types.h>    
#include <sys/ipc.h>    
#include <sys/shm.h>    
         
#define PERM S_IRUSR | S_IWUSR    
       
int main(int argc, char **argv)    
{    
         int shmid;    
         char *p_addr, *c_addr;    
         
         if(argc != 2){    
                 fprintf(stderr,"Usage: %sn", argv[0]);    
                 exit(0);    
         }    
         
         //创建1k的共享内存,可读可写    
         if((shmid = shmget(IPC_PRIVATE, 1024, PERM)) == -1){    
                 fprintf(stderr, "Create share memory error: %sn",strerror(errno));    
         }    
         
         //创建子进程    
         if(fork()){ //父进程,写操作    
                 p_addr = shmat(shmid, NULL , 0); //映射到父进程中    
                                              //地址为NULL,说明让系统自动指定地址。    
                 memset(p_addr, '', 1024);    
                 strncpy(p_addr, argv[1], 1024);  //拷贝命令行输入字符到共享内存    
                 wait(NULL);  
                 shmctl(shmid,IPC_RMID,NULL);  
                 exit(0);    
         } else{    
                 sleep(1);  //子进程,读操作    
                 c_addr = shmat(shmid, 0 ,0); //共享内存映射到子进程    
                 printf("Client get %sn", c_addr);                    
                 exit(0);    
         }    
}

运行结果:

huangcheng@ubuntu:~$ ./a.out huangcheng  
Client get huangcheng

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

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

推荐文章
    热点阅读