关于linux共享内存的使用

#include<sys/shm.h>#include<sys/mman.h>#include<fcntl.h>#include<unistd.h>#include<st... #include<sys/shm.h>
#include<sys/mman.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/ipc.h>

#define CHILMES "this is the client's message" /*子进程消息*/
#define PAREMES "this is the father's message" /*父进程消息*/
#define SHM_SIZE 1000 /*共享内存大小*/

int main(void)
{
int fd;
fd = open("./shmap.txt",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IXUSR);

int shmid;
shmid = shmget(IPC_PRIVATE,SHM_SIZE,0600);

char *shmptr;
shmptr = shmat(shmid,0,0);

mmap(shmptr,SHM_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);

pid_t pid;
if((pid=fork())<0)
{
printf("pid error\n");
exit(2);
}
else if(pid == 0)//子进程
{
sleep(3); //让父进程先写内存
memcpy(shmptr+sizeof(PAREMES),CHILMES,sizeof(CHILMES));
}
else
{
memcpy(shmptr,PAREMES,sizeof(PAREMES));
}
msync(shmptr,SHM_SIZE,MS_SYNC);
}

意图在于创建一个文件映射到共享内存中,父子进程均对其进行操作,将更改后信息写在文件里,现在程序执行完文件里没有东西。。。。。ORZ
可能是mmap的错误,但不知道错在哪。。
展开
 我来答
sofire
2008-09-08 · 超过63用户采纳过TA的回答
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:0
展开全部
mmap返回的地址和shmat返乎渣回的地址不一样。
不明仿核白为何要用共享内存的方岁大悄式来操作Mmap的内存。
快又稳
2024-10-23 广告
广州快又稳网络科技有限公司是一家集技术研发、产品创新、服务优化于一体的高新技术企业。公司自成立以来,始终秉承“网络使人类缩进距离,我们让网络快又稳”的核心理念,致力于为全球客户提供高效、安全、易用的互联网解决方案及信息技术服务。在数字时代,... 点击进入详情页
本回答由快又稳提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式