Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 标记预分配的文件块在linux中有效_C_Linux_Filesystems - Fatal编程技术网

C 标记预分配的文件块在linux中有效

C 标记预分配的文件块在linux中有效,c,linux,filesystems,C,Linux,Filesystems,Linux具有fallocate()函数,该函数允许为文件预先分配块。但是,即使底层块可能包含旧数据,该文件似乎也充满了零 这是因为在现代文件系统中,块被标记为无效,所以当您读取文件时,操作系统只会用零填充缓冲区。将这些块标记为有效的唯一方法是写入文件 这是防止读取其他用户数据的安全措施。当root用户调用fallocate()时,为root用户设置一个异常并将这些块标记为有效是合乎逻辑的,但函数行为是相同的 所以我在问,是否有一个单独的函数只对root用户有效,用于验证预分配的文件块 所以我在

Linux具有
fallocate()
函数,该函数允许为文件预先分配块。但是,即使底层块可能包含旧数据,该文件似乎也充满了零

这是因为在现代文件系统中,块被标记为无效,所以当您读取文件时,操作系统只会用零填充缓冲区。将这些块标记为有效的唯一方法是写入文件

这是防止读取其他用户数据的安全措施。当root用户调用
fallocate()
时,为root用户设置一个异常并将这些块标记为有效是合乎逻辑的,但函数行为是相同的

所以我在问,是否有一个单独的函数只对root用户有效,用于验证预分配的文件块

所以我在问,是否有一个单独的函数只对root用户有效,用于验证预分配的文件块

简短的回答是否定的。你在问题本身就有理由。它基本上是为了防止应用程序读取随机的旧数据并优化性能,从而避免额外的步骤来验证预分配的文件块


作为root用户,没有任何东西可以阻止您在设备上进行原始读取。

直接从设备读取。@alk如何找到文件第n个块的位置?使用
FIBMAP ioctl()
?这取决于使用的文件系统。对于Linux,这可能会有所帮助: