如何创建带有文件孔的文件?

文件孔是文件中的空白空间,但是不占用任何磁盘空间,并且包含空字节。因此,文件大小大于其在磁盘上的实际大小。

但是,我不知道如何创建带有文件孔的文件进行试验。

回答:

dd命令与seek参数一起使用。

dd if=/dev/urandom bs=4096 count=2 of=file_with_holes

dd if=/dev/urandom bs=4096 seek=7 count=2 of=file_with_holes

这会为您创建一个从字节8192到字节28671的漏洞。

这是一个示例,说明该文件确实存在漏洞(该ls -s命令告诉您文件正在使用多少磁盘块):

$ dd if=/dev/urandom bs=4096 count=2 of=fwh # fwh = file with holes

2+0 records in

2+0 records out

8192 bytes (8.2 kB) copied, 0.00195565 s, 4.2 MB/s

$ dd if=/dev/urandom seek=7 bs=4096 count=2 of=fwh

2+0 records in

2+0 records out

8192 bytes (8.2 kB) copied, 0.00152742 s, 5.4 MB/s

$ dd if=/dev/zero bs=4096 count=9 of=fwnh # fwnh = file with no holes

9+0 records in

9+0 records out

36864 bytes (37 kB) copied, 0.000510568 s, 72.2 MB/s

$ ls -ls fw*

16 -rw-rw-r-- 1 hopper hopper 36864 Mar 15 10:25 fwh

36 -rw-rw-r-- 1 hopper hopper 36864 Mar 15 10:29 fwnh

如您所见,带孔的文件尽管大小相同,但占用的磁盘块较少。

如果您想要执行此操作的程序,则为:

#include <unistd.h>

#include <sys/types.h>

#include <stdio.h>

#include <fcntl.h>

int main(int argc, const char *argv[])

{

char random_garbage[8192]; /* Don't even bother to initialize */

int fd = -1;

if (argc < 2) {

fprintf(stderr, "Usage: %s <filename>\n", argv[0]);

return 1;

}

fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666);

if (fd < 0) {

perror("Can't open file: ");

return 2;

}

write(fd, random_garbage, 8192);

lseek(fd, 5 * 4096, SEEK_CUR);

write(fd, random_garbage, 8192);

close(fd);

return 0;

}

以上是 如何创建带有文件孔的文件? 的全部内容, 来源链接: utcz.com/qa/406535.html

回到顶部