问题描述
当我的文件系统收到对 write()
的调用且缓冲区长度超出当前文件大小时,程序知道要增加文件大小。
但是,如果文件变小了怎么办?例如,如果我将文件的内容从“hello”更改为“hell”会怎样?对 write() 的调用以偏移 0 缓冲区长度 4 发出。如果文件系统遵循这些指令并且只更新存储数据的前 4 个字节而不更改文件大小,则下一次读取仍将显示相同的字符串。
我的保险丝实现如何知道何时应该丢弃当前正在写入的缓冲区末尾的数据并缩小文件大小?
那么,如何区分:
-
example string
->write(offset=0,buf="hello")
->hello
-
example string
->write(offset=0,buf="hello")
->hellole string
我正在使用 pyfuse3,但我怀疑这种逻辑在其他语言的绑定中是通用的。
解决方法
我的问题是我在打开文件时没有检查 O_TRUNC
标志,事实证明 truncate
命令使用 setattr 而 shell 中的重定向使用 open
O_TRUNC
集。