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

