为什么我的mmap在c中不能正常工作?
我有个奇怪的问题需要帮助, 我尝试使用rfork()生成一些子进程, 并使用mmap映射共享内存, 但是他们似乎没有使用相同的内存空间,而是有自己的, 我不知道原因是什么第二个问题是, 为什么int tt在tt++之后变为4, 但不是1 谢谢你的帮助 这是我的代码:为什么我的mmap在c中不能正常工作?,c,process,fork,semaphore,mmap,C,Process,Fork,Semaphore,Mmap,我有个奇怪的问题需要帮助, 我尝试使用rfork()生成一些子进程, 并使用mmap映射共享内存, 但是他们似乎没有使用相同的内存空间,而是有自己的, 我不知道原因是什么第二个问题是, 为什么int tt在tt++之后变为4, 但不是1 谢谢你的帮助 这是我的代码: #include <fcntl.h> #include <sys/stat.h> #include <sys/mman.h> #include <stdio.h> #include &
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>
int *tt;
int main()
{
tt = (int *)mmap (NULL, sizeof(int), O_RDONLY | O_RDWR, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
tt = 0;
sem_t mutex;
sem_init(&mutex,1,1);
pid_t proc[2];
int i, me = 0;
for (i = 0; i < 2; i ++) {
if ((proc[i] = rfork(RFPROC)) == 0) {
me = i;
sem_wait(&mutex);
printf("total: %d\n", tt);
tt++;
printf("total: %d\n", tt);
sem_post(&mutex);
break;
}
}
return 0;
}
如果要更改通过
tt=mmap(…)创建的共享内存代码>您必须使用*tt
:
*tt = 0;
及
由于您的mutex
是一个局部变量,不在共享内存块中,因此它实际上不会同步进程。。。
*tt = 0;
printf("total: %d\n", *tt);
(*tt)++;