为什么我的c中的mmap无法正常工作?

时间:2014-05-22 16:36:29

标签: c process fork semaphore mmap

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

这是我的输出:

total: 0
total: 4
total: 0
total: 4

1 个答案:

答案 0 :(得分:1)

如果您要更改tt = mmap( ... );创建的共享内存,则必须使用*tt

 *tt = 0;

 printf("total: %d\n", *tt);
 (*tt)++;