在 C 中与 mmap 共享向量

Sharing a vector with mmap in C

我可以通过共享内存发送结构,但是如果我想发送 myStructure[SIZE] 怎么办??

我正在尝试使用整数向量。我的问题从作者这里开始:

int fd, data_size = VECSIZE*sizeof(int), i, numbers[VECSIZE];
int *number;

fd = shm_open("/ex02_1100620", O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR);

ftruncate(fd, data_size);

number = numbers;

srand((unsigned) time(NULL));
for(i = 0; i < SIZE; i++){
    number[i] = rand()% SIZE + 1;
}

number = (int *)mmap(NULL, data_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

现在如果我做类似的事情:

number = numbers

然后打印 number[SIZE] 位置它工作,但是如果我在 mmap 之后打印 number[SIZE] 它打印所有 0 并在 reader.

上做同样的事情

我这样做了,但我认为捕捉错误来解释我的问题并不是真正必要的。

我读过这个 post Sharing an array of structs using mmap 但不明白我做错了什么。

如果您需要有关代码的更多信息,请直接说出来。

让我们回顾一下您的程序做了什么:

  • Create/allocate 一个名为 numbersint 数组。
  • 设置number指向numbers
  • 通过number写入一串数字-因为它指向numbers,这与直接写入numbers是一样的。
  • 映射一些共享内存并设置number指向共享内存。

你真正想做的是:

  • 映射一些共享内存并设置number指向共享内存。
  • 通过number写入一串数字-因为是指向共享内存,这与直接写入共享内存是一样的。

希望这些信息足以修复您的代码。

(注意共享内存没有变量名,不能直接写,所以要用指针)