【发布时间】:2019-03-05 18:31:36
【问题描述】:
文本文件的大小怎么可能等于里面的字符数?例如在 file.txt 你有字符串“abc”,它的大小是 3 个字节。一切都很好,但是文件图标、文件名和文件信息呢?这些数据存储在哪里?
我在 Windows 上检查过,但在 Unix 系统上情况可能是一样的。
【问题讨论】:
标签: file operating-system
文本文件的大小怎么可能等于里面的字符数?例如在 file.txt 你有字符串“abc”,它的大小是 3 个字节。一切都很好,但是文件图标、文件名和文件信息呢?这些数据存储在哪里?
我在 Windows 上检查过,但在 Unix 系统上情况可能是一样的。
【问题讨论】:
标签: file operating-system
当文件写入磁盘时,它是通过像write() 这样的低级系统调用,操作系统确切地知道它们在磁盘上的给定文件中写入了多少字节。此信息以及其他一些信息(创建和修改日期、所有权等)与文件一起写入。
在 linux(通常是 unix)中,它是通过 inode 来完整描述文件的。这些inodes中存储的信息是:
* 访问模式
* 拥有文件的用户和组的 ID
* 字节大小
* 创建、修改和访问日期
* 包含文件数据的磁盘块列表
这些或多或少是ls -l显示的信息
您还可以使用ls -i查看每个文件的inode编号
您可以找到 here 有关 inode 的更多详细信息。
其他信息的编码方式不同。例如,名称仅在描述目录的特殊文件中,而不在 inode 中。目录确实是将名称与inode 相关联的列表。
图标通常在系统范围内定义,图标与文件的关联是通过文件名(和文件扩展名)或写入“inode”(或在其他操作系统)。
【讨论】:
磁盘以块为单位分配空间。历史上的块为 512 字节,但多年来一直在增加,因此 4K 很常见。您的文件大小将始终是块大小的倍数。
大多数文件系统(Windoze 也这样做)在集群中分配磁盘空间。一个簇是许多相邻的块。然后,您的文件大小将始终是块大小乘以集群因子的倍数。这通常是操作系统计算的文件大小。
这一切都取决于磁盘格式和操作系统:
一切都很好,但是文件图标、文件名和文件信息呢?这些数据存储在哪里?
文件信息(日期、所有者等)通常在某种主文件表中。有时,此表将具有可以存储信息的扩展名。安全信息通常存储在此类溢出中。
一个合理设计的文件系统将在文件头中存储“A”文件名。文件名也存储在目录中,如果一个文件链接到多个目录,它可以有多个名称。头文件名用于在损坏的情况下恢复文件。
图标的位置完全是系统特定的,可以通过多种方式完成。对于可执行文件,它们通常存储在文件本身中。它们也可以是同一目录下的隐藏文件。
【讨论】: