当前位置: 首页 > 面试题库 >

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

程俊力
2023-03-14
问题内容

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

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


问题答案:

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;
}


 类似资料:
  • 问题内容: 如果我在不带字符“ |”的脚本下运行 它正常工作,但是当我添加字符“ |”时 如何添加字符“ |”不起作用 使用sql脚本将文本文件? 谢谢 问题答案: 管道字符在批处理命令中具有特殊含义,因此必须使用脱字符将其转义。这应该工作: 尽管这实际上不是将数据写入文本文件的好方法:通常,SQL Server不应具有写入C:驱动器根目录的权限,并且默认情况下处于禁用状态。我建议你看看喜欢的替代

  • 我在用Pandas将。txt文件转换为浮动值的数据目录时遇到了麻烦。我需要创建两列数据的散点图,但我一直得到错误“TypeError:Empty'DataFrame':no numeric data to plot”,所以我认为它是以字符串的形式读取数据。 下面是我运行df.info时得到的结果 列u_Vmag和u_B-V中没有任何测量值。 我觉得我只是错过了一些显而易见的东西。有人有什么建议吗?

  • 我需要向我的文件添加一些规则。然而,我在我的项目文件夹中找不到它。它不是由Xcode自动创建的吗?如果不是,什么命令允许我创建一个?

  • 我使用“Create database Gameshop;”创建了一个数据库。对于我的类和我需要把它作为一个'.sql'文件交出来,但是,我不知道去哪里找这个文件或者如何创建它。 我担心如果我尝试了什么而失败了,我会失去我所有的工作。谢谢你!

  • 我不熟悉bat文件,并开始实现它。我有一个启动我的应用程序的linux应用程序命令列表。我有一个要部署的windows系统,用于git bash来执行这些命令,但在每次系统重启时都必须手动启动应用程序,所以我开始实现在系统启动时映射的bat文件 使用上面的脚本,我打开了git bash。还需要执行以下命令 必须使用git bash执行上述命令,因为它是开源命令,不在windows中执行。git b

  • 问题内容: 假设我要制作文件: 由于不存在,因此给出。 自动生成这些目录的最Python方式是什么?对我来说,是否有必要显式地调用并且在每个单独的位置上调用(即/ foo,然后是/ foo / bar)? 问题答案: 该功能执行此操作。请尝试以下操作: 添加该块的原因是为了处理在和调用之间创建目录时的情况,以便保护我们免受竞争条件的影响。 在Python 3.2+中,有一种更优雅的方法可以避免上述