C 标记预分配的文件块在linux中有效
Linux具有C 标记预分配的文件块在linux中有效,c,linux,filesystems,C,Linux,Filesystems,Linux具有fallocate()函数,该函数允许为文件预先分配块。但是,即使底层块可能包含旧数据,该文件似乎也充满了零 这是因为在现代文件系统中,块被标记为无效,所以当您读取文件时,操作系统只会用零填充缓冲区。将这些块标记为有效的唯一方法是写入文件 这是防止读取其他用户数据的安全措施。当root用户调用fallocate()时,为root用户设置一个异常并将这些块标记为有效是合乎逻辑的,但函数行为是相同的 所以我在问,是否有一个单独的函数只对root用户有效,用于验证预分配的文件块 所以我在
fallocate()
函数,该函数允许为文件预先分配块。但是,即使底层块可能包含旧数据,该文件似乎也充满了零
这是因为在现代文件系统中,块被标记为无效,所以当您读取文件时,操作系统只会用零填充缓冲区。将这些块标记为有效的唯一方法是写入文件
这是防止读取其他用户数据的安全措施。当root用户调用fallocate()
时,为root用户设置一个异常并将这些块标记为有效是合乎逻辑的,但函数行为是相同的
所以我在问,是否有一个单独的函数只对root用户有效,用于验证预分配的文件块
所以我在问,是否有一个单独的函数只对root用户有效,用于验证预分配的文件块
简短的回答是否定的。你在问题本身就有理由。它基本上是为了防止应用程序读取随机的旧数据并优化性能,从而避免额外的步骤来验证预分配的文件块
作为root用户,没有任何东西可以阻止您在设备上进行原始读取。直接从设备读取。@alk如何找到文件第n个块的位置?使用
FIBMAP ioctl()
?这取决于使用的文件系统。对于Linux,这可能会有所帮助: