在 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 一个名为
numbers
的 int
数组。
- 设置
number
指向numbers
。
- 通过
number
写入一串数字-因为它指向numbers
,这与直接写入numbers
是一样的。
- 映射一些共享内存并设置
number
指向共享内存。
你真正想做的是:
- 映射一些共享内存并设置
number
指向共享内存。
- 通过
number
写入一串数字-因为是指向共享内存,这与直接写入共享内存是一样的。
希望这些信息足以修复您的代码。
(注意共享内存没有变量名,不能直接写,所以要用指针)
我可以通过共享内存发送结构,但是如果我想发送 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 一个名为
numbers
的int
数组。 - 设置
number
指向numbers
。 - 通过
number
写入一串数字-因为它指向numbers
,这与直接写入numbers
是一样的。 - 映射一些共享内存并设置
number
指向共享内存。
你真正想做的是:
- 映射一些共享内存并设置
number
指向共享内存。 - 通过
number
写入一串数字-因为是指向共享内存,这与直接写入共享内存是一样的。
希望这些信息足以修复您的代码。
(注意共享内存没有变量名,不能直接写,所以要用指针)