[英]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.