【问题标题】:What is the real size of file?文件的实际大小是多少?
【发布时间】:2019-03-05 18:31:36
【问题描述】:

文本文件的大小怎么可能等于里面的字符数?例如在 file.txt 你有字符串“abc”,它的大小是 3 个字节。一切都很好,但是文件图标、文件名和文件信息呢?这些数据存储在哪里?

我在 Windows 上检查过,但在 Unix 系统上情况可能是一样的。

【问题讨论】:

    标签: file operating-system


    【解决方案1】:

    当文件写入磁盘时,它是通过像write() 这样的低级系统调用,操作系统确切地知道它们在磁盘上的给定文件中写入了多少字节。此信息以及其他一些信息(创建和修改日期、所有权等)与文件一起写入。

    在 linux(通常是 unix)中,它是通过 inode 来完整描述文件的。这些inodes中存储的信息是:
    * 访问模式
    * 拥有文件的用户和组的 ID
    * 字节大小
    * 创建、修改和访问日期
    * 包含文件数据的磁盘块列表

    这些或多或少是ls -l显示的信息

    您还可以使用ls -i查看每个文件的inode编号

    您可以找到 here 有关 inode 的更多详细信息。

    其他信息的编码方式不同。例如,名称仅在描述目录的特殊文件中,而不在 inode 中。目录确实是将名称与inode 相关联的列表。

    图标通常在系统范围内定义,图标与文件的关联是通过文件名(和文件扩展名)或写入“inode”(或在其他操作系统)。

    【讨论】:

      【解决方案2】:

      磁盘以块为单位分配空间。历史上的块为 512 字节,但多年来一直在增加,因此 4K 很常见。您的文件大小将始终是块大小的倍数。

      大多数文件系统(Windoze 也这样做)在集群中分配磁盘空间。一个簇是许多相邻的块。然后,您的文件大小将始终是块大小乘以集群因子的倍数。这通常是操作系统计算的文件大小。

      这一切都取决于磁盘格式和操作系统:

      一切都很好,但是文件图标、文件名和文件信息呢?这些数据存储在哪里?

      文件信息(日期、所有者等)通常在某种主文件表中。有时,此表将具有可以存储信息的扩展名。安全信息通常存储在此类溢出中。

      一个合理设计的文件系统将在文件头中存储“A”文件名。文件名也存储在目录中,如果一个文件链接到多个目录,它可以有多个名称。头文件名用于在损坏的情况下恢复文件。

      图标的位置完全是系统特定的,可以通过多种方式完成。对于可执行文件,它们通常存储在文件本身中。它们也可以是同一目录下的隐藏文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多