Menu

2013-11-06  Edit

Frédéric Glorieux

Flux et fichiers

Notre informatique doit presque tout au système UNIX, à ses concepts, et notamment, à l’abstraction du système de fichiers. Les fichiers sont nommés ainsi par référence aux fiches perforées qui servaient à alimenter les programmes en données, comme un piano mécanique. Le papier a été remplacé par la bande magnétique, démultipliant le stockage, mais imposant aussi un modèle plus strictement linéaire. Ce modèle abstrait converge avec la machine de Turing, le principe qui architecture les processeurs, si bien que disque, clavier, imprimante, Internet… toutes les entrées sorties d’un ordinateur peuvent être représentées comme des “fichiers”, ou plus exactement, des flux d’octets (stream).

L’abstraction logique du modèle ne doit cependant pas cacher la réalité physique des supports. Une bande par exemple, a un temps linéaire de déroulement pour accéder à la plage souhaitée. Un disque par contre,
permet d’adresser plus rapidement un secteur, par rotation et translation d’une tête de lecture. Les mémoires ont un modèle d’adressage qui peut être ramené à des coordonnées euclidiennes. Internet est un graphe à redondances…

Tout peut devenir fichiers, mais l’informatique n’est pas qu’une logique, c’est aussi une physique matérielle, avec des masses, des frottements, du temps. Ceci affecte ce qui est possible nativement, et efficacement, par exemple revenir en arrière dans un flux, ce qui peut nécessiter une couche logicielle entre le “fichier” et son accès, par exemple un buffer.

La plupart des langages proposent des interfaces sur les fichiers, généralement très proches de ce que propose le système d’exploitation en C.

Perl: open, close, $line = <STDIN>, @lines = <DATA>, read, print, seek

Java est une machine virtuelle qui peut théoriquement s’abstraire complètement du système d’exploitation, et donc du langage C. En pratique, les principes sont très similaires, déjà la ponctuation, mais selon une philosophie très différente d’UNIX et du Shell. Le Shell permet d’assembler différents petits programmes très efficaces par le signe `|´ (pipe), mais le coût de modification de ces programmes est très important. La logique objet de Java permet d’étendre et modifier tous les programmes livrés avec le langage. Cela se paie par une obligation d’explicitation. Une écriture brève suppose beaucoup d’implicite. Cet implicite est hors d’accès du langage puisque justement il ne se dit pas. On trouve là des questions linguistiques classiques, comparer par exemple l’allemand, ou le basque, à l’anglais, ou au chinois. Cela fait en tous cas de Java un excellent langage pédagogique, parce qu’il
montre explicitement ce que d’autres langages cachent, et qui existe cependant, mais dans les recoins cachés de la documentation, les forums, ou le code source.

STDOUT, STDERR, STDIN

Les flux s’opposent généralement entre lecture et écriture (exemples: clavier, souris, manette, écran, tactile…). Java distingue particulièrement les flux d’octets (OutputStream.write(byte[] b) / InputStream.read(byte[] b)) et les flux de caractères (PrintStream.print(char[] s) / Reader.read(char[] cbuf)). Depuis le début du cours nous utilisons System.out.println() pour écrire sur la console. Analysons la documentation de System http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

  • De quelle nature est ce “out” ?
  • Modifier l’encodage de sortie de la console.
  • Comment lire le in au clavier ?

Fichiers et récursivité

Sur le dossier d’un miroir de site

  • afficher tous les fichiers d’un dossier
  • compter tous les fichiers
  • ne compter que les fichiers de type HTML
  • supprimer les fichiers qui ne sont pas du HTML

Related

Wiki: Home 2013-12-11 22:25:56.186231
Wiki: Home

Discussion

Anonymous
Anonymous

Add attachments
Cancel





Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.