繁体   English   中英

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

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

当内容从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. 将字符1\\n附加到the_file

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

(步骤1由外壳执行,当它解释了重定向>the_file 。步骤2随后由echo命令执行,因此两者之间可能要花费大量时间。)

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

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

暂无
暂无

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

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