在 `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)。
我正在编写一个基于 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)。