繁体   English   中英

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

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

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

由于某些原因,当我尝试执行以下代码时,我在struct_array[i].number = -1;行上遇到了Bus Error struct_array[i].number = -1;

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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM