在 `open()` 和 `mmap()` 之后无法访问数据结构 - 总线错误

Unable to access data structure after `open()` and `mmap()` - Bus Error

我正在编写一个基于 fork() 的服务器,我需要在父进程和它的分叉子进程之间共享一个数组。我被特别要求使用一个文件和 mmap() 来实现,这样我以后就可以轻松地使用 fcntl() 锁。

出于某种原因,当我尝试执行下面的代码时,我在 struct_array[i].number = -1; 行得到 Bus Error

if ((fd = open("/tmp/tmp-file", O_RDWR | O_CREAT | O_TRUNC, 777)) == -1) {
    perror("open");
}

struct my_struct *struct_array = mmap(NULL, struct_size, PROT_READ | PROT_WRITE,
    MAP_SHARED, fd, 0);

if (struct_array == MAP_FAILED) {
    perror("mmap");
}

for (i = 0; i < CLIENTS_SIZE; i++) {
    struct_array[i].number = -1;
}

我一遍又一遍地浏览手册页,但一定有什么我遗漏的。

如果相应的偏移量超出文件末尾,则访问映射内存范围内的地址会产生总线错误。

在这种特殊情况下,文件大小为零,您应该使文件至少 struct_size 字节长(使用 ftruncate)。