我正在尝试监控我在内容从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));
答案 0 :(得分:3)
echo 1 > the_file
执行以下操作:
the_file
截断为0字节。1
和\n
附加到the_file
在步骤1和2之间,文件的长度为0。
(步骤1由shell执行,当它解释重定向>the_file
时。然后由echo
命令执行步骤2,因此两者之间可能存在大量时间。 )
如果要覆盖文件的一个字符,可以使用dd
:
echo 1 | dd of=the_file bs=1 count=1 conv=notrunc