为什么我的mmap在c中不能正常工作?

为什么我的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 &

我有个奇怪的问题需要帮助, 我尝试使用rfork()生成一些子进程, 并使用mmap映射共享内存, 但是他们似乎没有使用相同的内存空间,而是有自己的, 我不知道原因是什么第二个问题是, 为什么int tt在tt++之后变为4, 但不是1

谢谢你的帮助

这是我的代码:

#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)++;