Was ist eine Datei?

9

Ich suche nach einer formalen Definition einer Datei, die nicht nur Speicher enthält, sondern auch Abstraktionen wie procfs oder / dev / null (oder eine auf Sicherungen basierende Datei), die sich nicht auf Speicher beziehen.

Bisher weiß ich, dass alle Dateien Abstraktionen sind, die

  • kann identifiziert werden
  • kann Namen haben (normalerweise in hierarchischen Strukturen organisiert)
  • kann als Byte-Stream zugegriffen werden
  • Geben Sie normalerweise Berechtigungen und andere (systemspezifische) Metadaten an

Ich konnte jedoch in keinem Betriebssystembuch, das ich bisher gelesen habe, eine nützliche formale Definition finden.

Giacomo Tesio
quelle
Hast du Inodes untersucht?
Bhaskar
1
Ich würde argumentieren, dass Dinge wie / dev / null überhaupt keine Dateien sind, sondern Hacks, mit denen wir auf Dinge zugreifen können, die keine Dateien sind, als wären sie Dateien. Außerdem ist mir nicht klar, was Sie unter "formal" verstehen. In welchem ​​Formalismus?
David Richerby
"Eine Datei kann mit fopen geöffnet werden"?
AdrianN
@DavidRicherby Jede Software-Abstraktion, die sich genau wie eine Datei verhält, ist eine Datei: Wir können Software-Entitäten nur hinsichtlich ihres Verhaltens definieren. Was den Formalismus betrifft, suche ich aus CS-Sicht etwas Strenges. Wir haben zum Beispiel eine formale Definition für Turingmaschinen.
Giacomo Tesio
Verschiedene Betriebssysteme weisen Dateien unterschiedliche Operationen zu, siehe z. B. * nix vs Windows. Man kann versuchen, eine gemeinsame Basis zu finden, aber es wird nicht genau sein. Außerdem spricht man in CS selten über Dateien - ich denke, dies geschieht nur beim Entwerfen eines Betriebssystems, eines Dateisystems, möglicherweise eines DBMS oder in einigen On-Disk-Algorithmen (z. B. Sort-Merge). (und einige andere)
Chi

Antworten:

6

Laut Wikipedia ist eine Computerdatei lediglich eine Ressource zum Speichern von Informationen. Der Begriff scheint aus der Lochkarten-Ära zu stammen, in der ein Computerprogramm buchstäblich in einer Datei gespeichert wurde (wie in einer Box zum Speichern loser Seiten, siehe Abbildung unten). Als andere Medien wie Scheiben eingeführt wurden, folgte die Nomenklatur.

Aus * nix-Sicht ist alles eine Datei: Sockets, Geräte, Terminals, Bildschirme / Monitore, Datendateien, Pipes usw. Im Gegensatz dazu neigt Microsoft Windows dazu, permanente Speicherdaten als "Dateien" und flüchtige Ressourcen zu bezeichnen, wie beispielsweise Pipes, Sockets, Rastergeräte usw. Andere Systeme haben möglicherweise ähnliche Definitionen irgendwo zwischen diesen beiden Extremen.

Leider gibt es, wie ich gerade sagte, keine einheitliche Definition für eine Datei, da es sich um unterschiedliche Dinge für unterschiedliche Personen handelt, außer dass sich alle auf die Basisdefinition einigen, dass eine Datei eine benannte Ressource ist, in der Daten gespeichert werden auf permanenten Medien (permanent bedeutet nicht, dass es niemals geändert werden kann, sondern dass es über Stromzyklen bestehen bleibt).

Lochkartendatei]( Wikipedia )

Phyrfox
quelle
Ich habe die Wikipedia-Definition gelesen, aber sie konzentriert sich zu sehr auf die Speicherung. Wie bereits erwähnt, suche ich nach einer Definition, die Dateien wie / dev / null abdeckt und keine Daten speichert.
Giacomo Tesio
@GiacomoTesio Die beiden Punkte, die ich ansprechen wollte, sind: (a) Datei bedeutet für verschiedene Autoren unterschiedliche Dinge, obwohl (b) Dateien zumindest allgemein als Ressourcen definiert sind. NUL und / dev / null sind spezielle Ressourcen, da sie eigentlich nichts speichern, aber dennoch Ressourcen sind. Eine Ressource ist einfach etwas, das Daten (oder beides) senden oder empfangen kann. Die Definition einer Datei in einem generischen Betriebssystembuch hängt von der Sichtweise des Autors ab.
Phyrfox
2

Ich stelle mir eine Datei als eine Folge von Bytes vor. Selbst nachdem es seinen Namen verloren hat (normalerweise verursacht durch einen Aufruf von rm, der die Verknüpfung aufhebt), existiert es immer noch auf der Festplatte, bis seine Chunks von anderen Dingen überschrieben werden. Dateiformate sind Kontexte zum Lesen von Dateien. Alles geht auf das Prinzip zurück, dass Informationen Bytes plus Kontext sind.

Das vorherige Poster hat Recht, dass Geräte, obwohl sie als Dateien behandelt werden, keine wirklichen Dateien sind. Dies ist ein sehr nützlicher Hack.

Also meine Definition einer Datei: eine Folge von Bytes, die im Speicher gespeichert sind.

ncmathsadist
quelle
2
"Also meine Definition einer Datei: eine Folge von Bytes." ist eine Folge von (sagen wir UTF-8) Bytes. Ist es eine Datei?
Reinierpost
Wir sprechen von Software-Abstraktionen. Alles, was sich genau wie eine Datei verhält, ist eine Datei. Tatsächlich können wir keine Software-Entität definieren, außer aufgrund ihres Verhaltens.
Giacomo Tesio
"Ich stelle mir eine Datei als eine Folge von Bytes vor." Dies ist nicht die einzige Definition von "Dateisystem". Siehe zum Beispiel en.wikipedia.org/wiki/Record-oriented_filesystem
Pseudonym