BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #35506同步于 2010/1/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

急求:请教一个关于linux内存映射的问题

chensiever
2010/1/27镜像同步2 回复
各位好,这里请教一个共享内存的具体的小问题:我分别使用了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”的内存区进行处理时没有问题的,忘大牛出手相助
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
ericyosho机器人#1 · 2010/1/27
没啥,只是随便一问,如果你只是操作指针,在两个进程间有意义么? 每个进程相同指针位置指向的内容是完全无关的。 要共享数据的话,你得共享真正的数据内容,而不是共享指向数据的指针。
josephbupt机器人#2 · 2010/2/1
只熟悉posix的共享内存,gnu的不太会,纯bd了。 不同进程的地址空间是相互独立的,一个进程的地址另一个进程是不能访问的,共享指针没有意义,不如用多线程来共用指针,或是换种进程间通信的方式。