379 lines
14 KiB
XML
379 lines
14 KiB
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||
<!DOCTYPE html
|
||
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
||
"tuteurs://DTD/tml.dtd">
|
||
<html>
|
||
<head>
|
||
<title>Formats</title>
|
||
</head>
|
||
<body>
|
||
|
||
<h1>Formats de fichiers : quelques concepts</h1>
|
||
|
||
<p>
|
||
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="&url.tuteurs;unix/formats-memo.html">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 un 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>
|
||
<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, 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 <a href="encodages.html">page
|
||
sur les encodages et les langues</a>) pourra comprendre les informations
|
||
que vous écrivez.
|
||
</p>
|
||
</pre>
|
||
|
||
<p>Ainsi par exemple, ce qui se trouve entre <tt><p></tt> et
|
||
<tt></p></tt> est un paraphaphe, ou encore un lien hypertexte est dans
|
||
une balise <tt><a></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: <schtroumpfette@greement.non-existent.invalid>
|
||
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 <scoubidou@greement.non-existent.invalid>
|
||
Subject: Bonjour
|
||
Message-ID: <20030917155514.GA23246@greement.non-existent.invalid>
|
||
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 <stdio.h>
|
||
|
||
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 exé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 : les formats <abbr
|
||
title="Portable Network Graphics">PNG</abbr>, <abbr title="Jpeg File
|
||
Interchange Format">JFIF</abbr>, <abbr title="Joint Photographic Experts
|
||
Group">JPEG</abbr>), identifiés par les types <acronym
|
||
title="Multipurpose Internet Mail Extensions">MIME</acronym>
|
||
<code>image/png</code> et <code>image/jpeg</code> respectivement, et
|
||
qui reçoivent le plus souvent les extensions <code>png</code> et
|
||
<code>jpg</code>).
|
||
</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 exé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 exécutable est la zone contenant le
|
||
« langage machine » qui grosso modo contient la liste des instructions
|
||
qui seront exécutées par le processeur. On ne modifie pas
|
||
directement un fichier exé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 formatage (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. 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 sous
|
||
Unix est le format <code>tar</code>. Dans le monde Windows, il est plus
|
||
souvent question de fichiers <code>zip</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>NTFS</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>
|
||
|
||
<div class="metainformation">
|
||
Auteur : Joël Riou.
|
||
Dernière modification le <date value="$Date: 2003-09-18 11:43:45 $" />.
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|