【问题标题】:What is the least memory usage for a binary file on UNIX-like OS?类 UNIX 操作系统上二进制文件的最少内存使用量是多少?
【发布时间】:2018-10-17 17:54:18
【问题描述】:

我实际上正在大学学习操作系统课程。 教授向我们介绍了 fread()、fwrite() ... C 函数和 read()、write() ... 系统调用。 当我必须定义块的大小和块数时,我的疑问就变成了。正如文档所述,此函数返回红色或写入的确切块数。 所以我的问题是:硬盘上是否有可能有一个小于一个字节的文件,或者是否有可能有一个尺寸不是字节的倍数的文件?

提前谢谢你。

编辑:正如有人建议的那样,我没有发布实际示例。这是我正在做的练习。它只是一个克隆文件的程序 https://gitlab.com/clementefnc/laboratori_so/blob/master/Lab01/Es4/Es4p4.c

【问题讨论】:

  • 没有和没有.......
  • 两者都不可能。
  • 通常,文件以磁盘块为单位分配,通常是 2 的幂,通常至少为 512(对于旧软盘,有时小至 128)字节;在现代硬盘上,它通常是 4096 的块大小或 2 的更大幂。您不能在文件中存储少于一个字节;在磁盘上,即使是一个字节的文件也会比一个字节占用更多的空间。详细信息取决于磁盘驱动器的文件系统类型。
  • 0 字节文件很常见。不可能有一个大于 0 字节且小于 1 字节的文件
  • 我投票结束这个问题,因为它不是关于软件开发过程中遇到的具体的实际问题。 (一个实际的问题——f/e,如何在有限的存储空间中有效地批量存储单个二进制标志——可能会更好地被接受;但是很难看到一个只看文件大小的问题的答案的实际用途并忽略元数据——索引节点、目录条目等)。

标签: c unix posix system-calls


【解决方案1】:

硬盘上是否有可能有一个小于一个字节的文件,或者有一个尺寸不是字节的倍数的文件?

是的,理论上这是完全可能的。 “文件”是一种抽象,没有什么可以阻止操作系统的存在,它对“文件”有不同的限制或完全不同的抽象。事实上,硬件支持的最小单位通常是一个多字节的块(例如一个 512 字节的扇区),并且操作系统已经提供了“小于硬件支持的最小大小”的抽象。

实际上,没有任何操作系统支持这一点;并且很难看到它的用例(因此未来任何操作系统都不太可能支持它)。

【讨论】:

  • 在C语言中(OP指的是read、write、fread、fwrite)文件IO操作是以字节为单位定义的。读写计数是整数,最小单位是字节。即文件的POSIX 抽象是字节流。 (虽然一个字节可能不是 8 位)
  • @pm100:是的,但是 POSIX 以多种方式扩展了标准 C 库,并且每个现代类 Unix 操作系统都以多种方式扩展了 SYS-V。您可以(理论上)在“经过认证的 Unix”操作系统(不仅仅是“类 Unix”)上运行用 C 编写的程序(使用扩展名/s),该操作系统提供从文件读取/写入位的能力。跨度>
  • 他的意思是没有操作系统曾经有一个小于 1 字节的文件长度单位;即,您不能拥有 11 位长文件。当然,OS/FS 可以构建为每个磁盘块有多个文件:Linux 上的 ReiserFS 做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2015-03-16
  • 2010-10-12
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多