Qu'est-ce qu'un fichier?

9

Je cherche une définition formelle de fichier qui n'inclut pas seulement le stockage mais aussi des abstractions comme procfs ou / dev / null (ou tout fichier basé sur un fusible) qui ne se rapportent pas au stockage.

Jusqu'à présent, je sais que tous les fichiers sont des abstractions

  • Peut être identifié
  • peut avoir des noms (généralement organisés en structures hiérarchiques)
  • peut être consulté en tant que flux d'octets
  • fournissent généralement des autorisations et d'autres métadonnées (spécifiques au système)

Cependant, je n'ai pas pu trouver de définition formelle utile dans aucun livre sur le système d'exploitation que j'ai lu jusqu'à présent.

Giacomo Tesio
la source
avez-vous examiné les inodes?
Bhaskar
1
Je dirais que des choses comme / dev / null ne sont pas du tout des fichiers mais plutôt des hacks nous permettant d'accéder à des choses non-fichiers comme s'il s'agissait de fichiers. De plus, il n'est pas clair pour moi ce que vous entendez par «formel». Dans quel formalisme?
David Richerby
"Un fichier est quelque chose qui peut être ouvert avec fopen"?
adrianN
@DavidRicherby toute abstraction logicielle qui se comporte exactement comme un fichier est un fichier: nous ne pouvons définir des entités logicielles qu'en fonction de leur comportement. Quant au formalisme, je recherche quelque chose de rigoureux du point de vue CS. Nous avons une définition formelle des machines de turing par exemple.
Giacomo Tesio
Différents systèmes d'exploitation attribuent différentes opérations aux fichiers, voir par exemple * nix vs Windows. On peut essayer de trouver un terrain d'entente, mais ce ne sera pas précis. De plus, dans CS, on parle rarement de fichiers - je pense que cela ne se fait que lors de la conception d'un système d'exploitation, d'un système de fichiers, peut-être d'un SGBD, ou dans certains algorithmes sur disque (par exemple, tri-fusion). (et quelques autres)
chi

Réponses:

6

Selon Wikipedia, un fichier informatique est simplement une ressource pour stocker des informations. Le terme semble provenir de l'ère des cartes perforées, où un programme informatique était littéralement stocké dans un fichier (comme dans, une boîte utilisée pour stocker des pages volantes, voir l'image ci-dessous). À mesure que d'autres formes de médias ont été introduites, comme les disques, la nomenclature a suivi.

D'un point de vue * nix, tout est un fichier: sockets, appareils, terminaux, écrans / moniteurs, fichiers de données, tuyaux, etc. Microsoft Windows, en revanche, a tendance à appeler des "fichiers" de données de stockage permanent et des ressources volatiles, quels qu'ils soient, tels que les canaux nommés, les sockets, les périphériques raster, etc. D'autres systèmes peuvent avoir des définitions similaires quelque part entre ces deux extrêmes.

Malheureusement, comme je viens de le dire, il n'y a pas de définition unique de ce qu'est un fichier, car ce sont des choses différentes pour différentes personnes, sauf que tout le monde a tendance à s'entendre sur la définition de base qu'un fichier est une ressource nommée qui stocke des données sur des supports permanents (permanent ne signifie pas qu'il ne peut jamais être modifié, mais simplement qu'il persiste pendant les cycles d'alimentation).

Fichier de carte perforée]( Wikipedia )

phyrfox
la source
J'ai lu la définition de wikipedia, mais elle est trop axée sur le stockage. Comme indiqué, je recherche une définition qui couvre des fichiers comme / dev / null, qui ne stockent pas de données.
Giacomo Tesio
@GiacomoTesio Les deux points que j'essayais de faire sont (a) fichier signifie des choses différentes pour différents auteurs, bien que (b) les fichiers soient au moins universellement définis comme des ressources. NUL et / dev / null sont des ressources spéciales, car elles ne stockent rien, mais sont néanmoins des ressources. Une ressource est simplement quelque chose qui peut transmettre ou recevoir des données (ou les deux). La définition générique d'un fichier d'un livre OS dépendra du point de vue de l'auteur.
phyrfox du
2

Je pense à un fichier comme une séquence d'octets. Même après qu'il ait perdu son nom (généralement causé par un appel à rm, ce qui le dissocie), il existe toujours sur le disque jusqu'à ce que ses morceaux soient remplacés par d'autres éléments. Les formats de fichiers sont des contextes de lecture de fichiers. Tout revient au principe selon lequel les informations sont des octets plus le contexte.

L'affiche précédente a raison: les appareils, tout en étant traités comme des fichiers, ne sont pas vraiment des fichiers. C'est un hack très utile.

Donc ma définition d'un fichier: une séquence d'octets stockés en mémoire.

ncmathsadist
la source
2
"Donc ma définition d'un fichier: une séquence d'octets." est une séquence d'octets (disons UTF-8). Est-ce un fichier?
reinierpost
Nous parlons d'abstractions logicielles, tout ce qui se comporte exactement comme un fichier est un fichier. En fait, nous ne pouvons définir aucune entité logicielle sauf à partir de son comportement.
Giacomo Tesio
"Je pense à un fichier comme une séquence d'octets." Ce n'est pas la seule définition de "système de fichiers". Voir, par exemple, en.wikipedia.org/wiki/Record-oriented_filesystem
Pseudonyme