返回信息流各位好,这里请教一个共享内存的具体的小问题:我分别使用了mmap和shmget来实现父子进程的内存共享,都不能达到程序的需求。我们这个程序(见下)中需要对主程序中的包记录对应的指针进行映射,而主进程每处理完一条包记录后指针会偏移进行循环处理,现在子进程函数不能处理映射的包指针。另外想请教类似于这样在主进程映射循环的指针,有没有比较好的方法,谢谢大家!
int main()
{
//此处是对数据包进行循环处理
for(int i=0;i<=1000;i++)
{
processed = 0;
//bottom是数据包的起始地址(指针),也是子进程处理函数的参数,在此进行内存映射。每处理完一条记录bottom加上数据包长度len进行偏移
bottom=(uint8_t*)mmap(NULL,sizeof(char)*len,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
//bottom进行偏移,接着进行循环
bottom += len;
processed += len;
}
}
int pid;
if((pid = fork()) ==0)
{
//在这里处理的有问题
functionHandle(bottom);
}
else
{
}
}
另外也使用了 shm_id = shmget(IPC_PRIVATE,1024*1024*1024,IPC_CREAT);
bottom = (uint8_t*)shmat(shm_id,NULL,0);
都不成功。单独做了测试对类似“helloword”的内存区进行处理时没有问题的,忘大牛出手相助
这是一条镜像帖。来源:北邮人论坛 / cpp / #35506同步于 2010/1/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
急求:请教一个关于linux内存映射的问题
chensiever
2010/1/27镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
没啥,只是随便一问,如果你只是操作指针,在两个进程间有意义么?
每个进程相同指针位置指向的内容是完全无关的。
要共享数据的话,你得共享真正的数据内容,而不是共享指向数据的指针。
只熟悉posix的共享内存,gnu的不太会,纯bd了。
不同进程的地址空间是相互独立的,一个进程的地址另一个进程是不能访问的,共享指针没有意义,不如用多线程来共用指针,或是换种进程间通信的方式。