是否可以写入mmap文件而不会出现总线错误

时间:2015-06-09 17:09:14

标签: c++ c mmap

我正在尝试监控我在内容从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));

1 个答案:

答案 0 :(得分:3)

echo 1 > the_file执行以下操作:

  1. the_file截断为0字节。
  2. 将字符1\n附加到the_file
  3. 在步骤1和2之间,文件的长度为0。

    (步骤1由shell执行,当它解释重定向>the_file时。然后由echo命令执行步骤2,因此两者之间可能存在大量时间。 )

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

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