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