La page théorique sur les formats (enfin !).

This commit is contained in:
jriou 2003-09-17 17:13:54 +00:00
parent dedb964fc7
commit b00603acee

View file

@ -11,12 +11,361 @@
<h1>Formats de fichiers</h1> <h1>Formats de fichiers</h1>
<p> <p>
<em>En construction...</em> Un fichier informatique est une suite de nombres compris entre 0 et
255 (chacun de ces nombres est ce qu'on appelle un <a
href="&url.jargon;#octets"><em>octet</em></a>). Suivant le type
d'information que l'on veut stocker dans un fichier (texte brut, texte
formatté, image, son, programmes, ...), les logiciels organisent les
données de manière spécifique pour en faire des suites d'octets. La
manière d'organiser un type de donnée pour en faire un fichier s'appelle
un <em>format</em>.
</p>
<p>
Cette page a pour but d'expliquer ce qu'est un format de fichier (sans
entrer dans les détails techniques rébarbatifs). Pour savoir plus
concrètement comment ouvrir tel ou tel fichier, ou comment convertir mon
fichier dans un autre format, allez voir le
<a href="">mémo sur les formats</a>.
</p>
<h2>Les deux grands types de formats</h2>
<p>Les deux sous-sections qui suivent décrivent les deux grandes familles
de formats informatiques.</p>
<h3>Les formats textes ou encore « lisibles par un humain »</h3>
<p>
Quand vous prenez un stylo et un papier et que vous écrivez des
lettres, des chiffres, des symboles de ponctuation, par exemple pour
noter un numéro de téléphone, un cours, une dissertation, ou une lettre,
n'importe quel autre être humain sachant lire pourra comprendre les
informations que vous aurez écrit, au moins en supposant
qu'il parle la même langue que vous, cf. notre <a href="encodages.html">page
sur les encodages et les langues</a>.
</p>
<p>
Des suites de caractères (plus ou moins nombreux) griffonnés sur un
papier ont donc ceci de commun qu'il s'agit de <em>texte brut</em>. Le
format informatique (générique) le plus simple est ainsi constitué de
suites de caractères, et de retours à la ligne. À chaque caractère
correspond un ou plusieurs octets, c'est-à-dire des nombres compris entre
0 et 255, selon une règle définie par un encodage particulier (par
exemple, dans l'encodage Latin-1 (le plus courant dans les pays
occidentaux), un « A » est codé par le nombre 65 et à chaque caractère
correspond un seul octet).
</p>
<p>
Lorsque vous avez une fichier sous un format « texte brut », vous
pouvez le modifier avec <em>n'importe quel <a
href="&url.tuteurs;unix/editeurs/">éditeur de texte</a></em>, de
même que pour écrire sur un bout de papier, vous pouvez utiliser
n'importe quel stylo.
</p>
<p>On a vu que l'on pouvait noter tout et n'importe quoi dans un fichier
texte, mais pour certains usages, on demande néanmoins à des fichiers au
format texte de respecter certaines règles, une certaine syntaxe. Voici
quelques exemples de tâches spécifiques qui utilisent des fichiers au
format texte brut :
</p>
<h4>Écrire des pages Web</h4>
<p>
La page Web que vous lisez est au format <tt>HTML</tt> (plus précisément,
il s'agit d'<tt>XHTML 1.0 Strict</tt>). En plus de contenir du texte en
français « brut », certaines <em>balises</em> permettent de signifier à
votre navigateur Web comment il doit afficher la page : une barre de
navigation à gauche, nos choix de couleurs, etc... En voici un extrait :
</p>
<pre>
&lt;p&gt;
Quand vous prenez un stylo et un papier et que vous écrivez des
lettres, des chiffres, des symboles de ponctuation, par exemple pour
noter un numéro de téléphone, un cours, une dissertation, une lettre,
n'importe quel autre être humain sachant lire (au moins en supposant
qu'il parle la même langue que vous, cf. notre &lt;a href="encodages.html"&gt;page
sur les encodages et les langues&lt;/a&gt;) pourra comprendre les informations
que vous écrivez.
&lt;/p&gt;
</pre>
<p>Ainsi par exemple, ce qui se trouve entre <tt>&lt;p&gt;</tt> et
<tt>&lt;/p&gt;</tt> est un paraphaphe, ou encore un lien hypertexte est dans
une balise <tt>&lt;a&gt;</tt>.</p>
<h4>Envoyer un courrier électronique</h4>
<p>
Quand vous envoyez un courrier électronique avec votre logiciel préféré,
celui-ci va envoyer votre message dans un format particulier : les
premières lignes constituent ce qu'on appelle l'en-tete du message,
vient ensuite une ligne vide, et tout ce qui vient ensuite constitue le
corps du message. L'en-tete du message sert à donner des informations sur
l'expéditeur du message, la date, le sujet, l'encodage utilisé, etc...
ainsi que quelques informations techniques. Voici un exemple :
</p>
<pre>
Return-Path: &lt;schtroumpfette@greement.non-existent.invalid&gt;
Delivered-To: scoubidou@greement.non-existent.invalid
Received: (qmail 23265 invoked by uid 1033); 17 Sep 2003 15:55:14 -0000
From: schtroumpfette@greement.non-existent.invalid
Date: Wed, 17 Sep 2003 17:55:14 +0200
To: Scoubidou &lt;scoubidou@greement.non-existent.invalid&gt;
Subject: Bonjour
Message-ID: &lt;20030917155514.GA23246@greement.non-existent.invalid&gt;
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.4i
Bonjour,
J'aimerais discuter avec vous.
--
La schtroumpfette
</pre>
<h4>Programmer</h4>
<p>
Les programmes que vous utilisez ont été développés dans différents
langages : C, C++, Perl, Shell, etc...
Les codes sources de ces programmes sont dans un format texte, ce qui ne
les empêche pas de respecter une syntaxe précise. Voici à quoi cela
peut ressembler :
</p>
<pre>
/* bonjour.c : comment dire « Bonjour. » en C */
#include &lt;stdio.h&gt;
int main (int argc, char **argv) {
printf("Bonjour.\n");
return(0);
}
</pre>
<pre>
#!/bin/sh
# Comment dire « Bonjour. » en Shell
exec echo Bonjour.
</pre>
<p>Suivant que le langage est interprêté ou compilé, il sera ou non
nécessaire de convertir votre code source dans un format éxécutable en
utilisant un <em>compilateur</em>.
</p>
<h3>Les formats binaires</h3>
<p> À l'opposé des formats textes, se trouvent les formats binaires.
L'information que l'on stocke dans de tels fichiers ne se résume pas à
des suites de caractères.</p>
<p>
Avant de continuer, précisons que les noms de fichiers comportent souvent
une extension, par exemple dans <tt>Le_coucou_au_fond_des_bois.ogg</tt>,
l'extension est <tt>ogg</tt>. L'extension permet souvent de savoir
rapidement à quel format on a à faire. Attention cependant au fait que
parfois derrière un fichier d'une certaine extension peut se cacher sous
un autre (cf. le programme <a href="formats-memo.html#file">
<tt>file</tt></a>) !
</p>
<p>Voici brièvement quelques exemples :
</p>
<h4>Images bitmap</h4>
<p>Une image peut-être stockée comme une grille de petits
points (pixels), chaque pixel ayant une certaine « couleur ». Une fois que
l'on a associé certains octets aux différentes couleurs
(<em>par exemple</em> 3 octets, un pour la composante rouge, un autre pour la
composante bleue, et un dernier pour la composante verte), on peut mettre
au début du fichier la largeur et la hauteur de l'image, et ensuite
parcourir l'image ligne par ligne, et écrire la séquence d'octets
qui correspond à chaque pixel de l'image. Le type de format que je viens
de décrire est extrêmement rudimentaire (dans cette famille de format, on
trouve le format <tt>bmp</tt> par exemple) ; des fichiers dans un tel
format occuperont beaucoup de place sur les disques durs, c'est pourquoi
il existe des formats qui contiennent des optimisations pour réduire
sensiblement la taille des fichiers d'images (exemples : <tt>png</tt>,
<tt>jpg</tt>).
</p>
<h4>Son échantillonné</h4>
<p>C'est comme pour les images : on découpe le son
en intervalles de temps très brefs (il y a
le plus souvent autour de quarante
mille intervalles par seconde) et on note la valeur du signal
électrique correspondant, ce qui donne un nombre entier (avec signe)
que l'on peut stocker. Pour un enregistrement en stereo, on note
parallèlement les valeurs gauche et droite. Comme formats de ce type, on
trouve les formats <tt>wav</tt>, <tt>au</tt>
De même que pour les images, il existe des techniques de compression qui
permettent de réduire considérablement la taille qu'occupent les fichiers
sonores. On dispose ainsi des formats <tt>ogg</tt> et <tt>mp3</tt>.
</p>
<p> Il existe d'autres manières de stocker de la « musique », les
fichiers <tt>midi</tt>, où ne sont enregistrées que des suites
d'indications sur les notes que les musiciens jouent sur leurs
instruments (d'une certaine manière, ces fichiers contiennent
l'information contenue sur une « partition »). Quand vous lisez ces
fichiers avec un programme convenable, un synthétiseur (logiciel ou
matériel) va convertir ces données en un véritable son.
</p>
<p>
Évidemment, la qualité musicale qui sort des hauts-parleurs quand vous
jouez des fichiers <tt>midi</tt> est très loin d'être à la hauteur de ce qui
parvient à vos oreilles quand vous écoutez un orchestre composé de
musiciens talentueux !
</p>
<h4>Programmes éxécutables</h4>
<p>Suivant la famille du système
d'exploitation que vous utilisez (Unix, Windows, Mac), et même à
l'intérieur d'une famille suivant la variante du système ou le type de
processeur, les programmes sont stockés dans un format différent. La
partie la plus imporante d'un fichier éxécutable est la zone contenant le
« langage machine » qui grosso modo contient la liste des instructions
qui seront éxécutées par le processeur. On ne modifie pas
directement un fichier éxécutable.
</p>
<h2>Cas particuliers</h2>
<h3>Traitements de texte</h3>
<p>
Certains logiciels de traitement de texte utilisent un format binaire
pour stocker le texte avec son formattage (taille des fontes, caractères
gras, italiques, etc...), plus précisément, ils utilisent
<em>plusieurs</em> formats : d'une version à l'autre, le logiciel
Microsoft Word utilise un format plus ou moins différent de la version
précédente, ce qui pose beaucoup de problèmes, surtout si vous n'avez pas
la version « dernier cri » du logiciel en question.
</p>
<p>
À l'opposé, certains traitements de textes utilisent un format texte,
de façon similaire au format <code>HTML</code> utilisé sur le Web. C'est
par exemple le cas du programme
<a href="&url.tuteurs;logiciels/latex/">LaTeX</a>. Toutes les informations
vous mettez dans un fichier LaTeX (extension <code>tex</code>) sont
lisibles et modifiables dans votre éditeur de texte préféré, et au moins
vous être sûr que le format ne vas pas changer significativement d'une
version à l'autre. En voici un échantillon :
</p>
<pre>
\documentclass{article}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\begin{document}
Ceci est un fichier \TeX.
\end{document}
</pre>
<p>
Vous devez utiliser le programme <code>latex</code> pour mettre en page
votre fichier <code>tex</code>. Il va ainsi écrire un fichier binaire
dans un format particulier <code>dvi</code> qui contient essentiellement
beaucoup d'informations qui ressemblent à
« À tel endroit de la page numéro 42, afficher MU dans une fonte qui
fait 5.08 cm de hauteur. »
</p>
<h3>Documents mis en page</h3>
<p>Ce sont des fichiers « prêts à être imprimés », ces fichiers
contiennent toutes les instructions que l'on a pratiquement plus qu'à
envoyer à l'imprimante (ce qui nécessite parfois une conversion).</p>
<h4>Portable Document Format (<code>pdf</code>)</h4>
<p>
Mais, encore une fois, il existe plusieurs formats de ce type. Nous avons
déjà évoqué ci-desus le format <tt>dvi</tt> utilisé par LaTeX. On
dispose aussi du format <tt>pdf</tt> (Portable Document Format) développé
par Adobe, vous avez très certainement déjà rencontré de tels fichiers en
naviguant sur le Web. Les fichiers <tt>dvi</tt> et <tt>pdf</tt> sont au
format binaire.
</p>
<h4>PostScript (<code>ps</code>)</h4>
<p>
Un autre format important dans ce contexte est le format
<em>PostScript</em> (lui aussi développé par Adobe). Il est depuis
quelques années utilisé par la plupart des imprimates laser. Son grand
avantage est qu'il est en mode texte et qu'il ne fait pas d'hypothèse sur
la résolution de l'imprimante par exemple, contrairement aux
formats utilisés auparavant pour envoyer des instructions aux
imprimantes ! Le format PostScript est un véritable langage de
programmation (si on veut dessiner 100 fois la même chose, on a pas
besoin de réécrire 100 fois les mêmes instructions par exemple).
</p>
<h3>Méta-formats</h3>
<h4>Archives</h4>
<p>
Dans certaines situations, il peut être commode de mettre plusieurs
fichiers dans un seul, on appelle cela une <em>archive</em>. En général,
au début d'un tel fichier se trouve les noms des fichiers contenus à
l'intérieur avec leur taille (ainsi que d'autres informations
techniques), puis viennent ensuite chacun des fichiers les uns à la suite
des autres. Le format le plus courant pour les fichiers archives est le
format <code>tar</code>.
</p>
<p>
Plus généralement, on a la notion de système de fichiers : il s'agit de
déterminer comment organiser les fichiers sur un disque dur et d'inscrire
les méta-informations, à savoir d'écrire quelque part la liste des
fichiers présents sur le disque ainsi que la position sur le disque où
ils sont écrits. Là, encore, de nombreuses possibilités existent : sous
Linux, on utilise en général <code>ext2</code>, <code>ext3</code> ou
<code>ReiserFS</code>, sous Windows, il y a des systèmes de fichiers
<code>fat</code>, <code>NTSC</code>, etc...
</p>
<h4>Fichiers compressés</h4>
<p>
Quand on a un fichier un peu long que l'on ne consulte pas
régulièrement, on peut décider de le comprimer pour qu'il prenne moins de
place sur le disque dur. Des outils sont faits pour cela. L'exemple
typique de format compressé est donné par les fichiers « gzippés »
(extension <tt>gz</tt>). Ainsi par exemple, un fichier PostScript
<tt>dea.ps</tt>, une fois comprimé s'appelle <tt>dea.ps.gz</tt>.
</p>
<p>
Le clou du spectacle s'obtient en combinant les deux méta-formats évoqués
ci-dessus : comprimer un fichier d'archive comprenant plusieurs
fichiers. On obtient alors un fichier <code>.tar.gz</code> (que certains
abrègent en <code>.tgz</code>) ; c'est un général sous cette forme que
l'on peut télécharger le code source de la plupart des logiciels libres.
</p> </p>
<div class="metainformation"> <div class="metainformation">
Auteur : Joël Riou. Auteur : Joël Riou.
Dernière modification le <date value="$Date: 2003-06-17 00:01:58 $" />. Dernière modification le <date value="$Date: 2003-09-17 17:13:54 $" />.
</div> </div>
</body> </body>