什么是文件?


9

我正在寻找文件的正式定义,该定义不仅包括存储,还包括与存储无关的抽象,例如procfs或/ dev / null(或任何基于保险丝的文件)。

到目前为止,我知道所有文件都是抽象的

  • 可以识别
  • 可以具有名称(通常按层次结构组织)
  • 可以作为字节流访问
  • 通常提供权限和其他(系统特定的)元数据

但是到目前为止,我在任何OS书籍中都找不到有用的正式定义。


您是否研究过inode?
Bhaskar

1
我认为/ dev / null之类的东西根本不是文件,而是黑客,它使我们能够像对待文件一样访问非文件内容。另外,我不清楚您所说的“正式”是什么意思。在什么形式主义内?
David Richerby '16

“文件是可以用fopen打开的文件”吗?
adrianN '16

@DavidRicherby行为完全类似于文件的任何软件抽象都是文件:我们只能根据软件行为来定义软件实体。至于形式主义,我正在从CS的角度寻找严谨的东西。例如,我们有针对图灵机的正式定义。
Giacomo Tesio '16

不同的操作系统将不同的操作分配给文件,例如* nix vs Windows。可以尝试找到一个共同点,但这并不精确。此外,在CS中很少有人谈论文件-我认为只有在设计OS,文件系统(也许是DBMS)或某些磁盘算法(例如排序合并)时才能完成。(和其他一些)
2016年

Answers:


6

根据维基百科,计算机文件仅仅是存储信息的资源。该术语似乎起源于打孔卡时代,在那里计算机程序实际上存储在文件中(例如,用于存储散页的盒子,请参见下图)。随着其他形式的介质(例如磁盘)的引入,其名称也随之而来。

从* nix的角度来看,一切都是文件:套接字,设备,终端,屏幕/监视器,数据文件,管道等。相比之下,Microsoft Windows倾向于将永久性存储数据称为“文件”,并将易失性资源称为“易失性资源”,例如命名管道,套接字,栅格设备等。在这两个极端之间,其他系统可能具有类似的定义。

不幸的是,正如我刚才所说的,对于文件的含义并没有一个统一的定义,因为对于不同的人来说这是不同的事情,除了每个人都倾向于在基线定义中一致认为文件是存储数据命名资源。在永久性介质上(永久性并不意味着它永远不能被修改,只是它在整个电源循环中一直存在)。

打孔卡文件]维基百科


我已经阅读了维基百科的定义,但是它过于专注于存储。如前所述,我正在寻找一个定义,该定义涵盖/ dev / null之类的不存储数据的文件。
Giacomo Tesio '16

@GiacomoTesio我试图提出的两点是(a)文件对不同作者的含义不同,尽管(b)文件至少被普遍定义为资源。NUL和/ dev / null是特殊资源,因为它们实际上并不存储任何内容,但是仍然是资源。资源只是可以传输或接收数据(或两者)的东西。通用OS书籍对文件的定义将取决于作者的观点。
phyrfox

2

我认为文件是字节序列。即使它丢失了名称(通常是由于调用rm导致链接断开),它仍然存在于磁盘上,直到其块被其他内容覆盖为止。文件格式是用于读取文件的上下文。一切都回到信息是字节加上下文的原则。

以前的说法是正确的,即设备虽然被视为文件,但实际上不是文件。这是一个非常有用的技巧。

所以我对文件的定义是:存储在内存中的字节序列。


2
“所以我对文件的定义是:字节序列。” 是(假设为UTF-8)字节的序列。它是文件吗?
reinierpost

我们谈论的是软件抽象,任何表现得完全像一个文件一个文件。实际上,除了行为之外,我们无法定义任何软件实体。
Giacomo Tesio '16

“我认为文件是字节序列。” 这不是“文件系统”的唯一定义。参见,例如,en.wikipedia.org
wiki /
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.