我如何知道在写入调用后何时缩小文件的大小?

问题描述

当我的文件系统收到对 write()调用且缓冲区长度超出当前文件大小时,程序知道要增加文件大小。

但是,如果文件变小了怎么办?例如,如果我将文件内容从“hello”更改为“hell”会怎样?对 write() 的调用以偏移 0 缓冲区长度 4 发出。如果文件系统遵循这些指令并且只更新存储数据的前 4 个字节而不更改文件大小,则下一次读取仍将显示相同的字符串。

我的保险丝实现如何知道何时应该丢弃当前正在写入的缓冲区末尾的数据并缩小文件大小?

那么,如何区分:

  1. example string -> write(offset=0,buf="hello") -> hello
  2. example string -> write(offset=0,buf="hello") -> hellole string

我正在使用 pyfuse3,但我怀疑这种逻辑在其他语言的绑定中是通用的。

解决方法

我的问题是我在打开文件时没有检查 O_TRUNC 标志,事实证明 truncate 命令使用 setattr 而 shell 中的重定向使用 open O_TRUNC 集。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...