我有一个奇怪的问题,需要一些帮助, 我曾尝试使用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
答案 0 :(得分:1)
如果您要更改tt = mmap( ... );
创建的共享内存,则必须使用*tt
:
*tt = 0;
和
printf("total: %d\n", *tt);
(*tt)++;