是否可以写入 mmap'd 文件而不会收到总线错误

Is it possible to write to a mmap'd file without getting a bus error

本文关键字:文件 错误 总线 mmap 是否      更新时间:2023-10-16

我试图监视我创建的文件,当内容从0更改为1时。这段代码创建了文件并对其进行了映射,然后旋转,等待*map的内容从'0'变为'1'

然而,一旦我运行echo 1 > file.dat,代码崩溃与Bus Error

我假设这是因为echo(或我尝试的任何其他方法)正在创建一个新文件,并且mmap不再指向相关的东西。有什么办法能解决这个问题吗?

int fd = open(filename.c_str(), O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
write(fd, "0", 1)
char* map = static_cast<char*>(mmap(0, 1, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0));

echo 1 > the_file执行以下操作:

  1. 截断the_file为0字节
  2. 1n添加到the_file

在步骤1和2之间,文件的长度为0。

(步骤1由shell执行,当它解释重定向>the_file时。然后由echo命令执行步骤2,因此两者之间可能会有很长的时间间隔。

如果您想覆盖文件的一个字符,您可以使用dd:

echo 1 | dd of=the_file bs=1 count=1 conv=notrunc