我仅使用系统调用来管理C语言中的文件,并且正在创建一个方法,我们将其称为“ make_backup”,在其中备份文件并进行更改。 该文件由二进制结构条目构成,例如数据库。 因此,下次我调用“ make_backup”时,我需要在上一次完成备份时进行备份。
我这样做的逻辑是在第一个“ make_backup”调用中保存文件的大小,并在第二个调用中访问文件。但是我禁止将这个off_s写入另一个/相同文件的问题。
在第一个调用中,我尝试在文件末尾的for loop
处5个字节的空位。在第二个调用中,将lseek与SEEK_HOLE结合使用以找到该offset + 5和ftruncate
来移除该孔。但是fallocate w/ FALLOC_FL_COLLAPSE_RANGE
偏移始终是EOF。
第二次尝试是使用某种形式的文件描述标记,例如SEEK_HOLE
,但是没有运气。
fcntl(fd, F_SET_FILE_RW_HINT,offset)