tuteurs.ens.fr/theorie/formats.tml

380 lines
14 KiB
Text
Raw Normal View History

<?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<72>: 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<EFBFBD>, image, son, programmes, ...), les logiciels organisent les
donn<EFBFBD>es de mani<6E>re sp<73>cifique pour en faire des suites d'octets. La
mani<EFBFBD>re d'organiser un type de donn<6E>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<EFBFBD>tement comment ouvrir tel ou tel fichier, ou comment convertir mon
fichier dans un autre format, allez voir le
2003-09-17 20:10:11 +02:00
<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 <20><>lisibles par un humain<69><6E></h3>
<p>
Quand vous prenez un stylo et un papier et que vous <20>crivez des
lettres, des chiffres, des symboles de ponctuation, par exemple pour
noter un num<75>ro de t<>l<EFBFBD>phone, un cours, une dissertation, ou une lettre,
n'importe quel autre <20>tre humain sachant lire pourra comprendre les
informations que vous aurez <20>crit, au moins en supposant
qu'il parle la m<>me langue que vous, cf.<2E>notre <a href="encodages.html">page
sur les encodages et les langues</a>.
</p>
<p>
Des suites de caract<63>res (plus ou moins nombreux) griffonn<6E>s sur un
papier ont donc ceci de commun qu'il s'agit de <em>texte brut</em>. Le
format informatique (g<>n<EFBFBD>rique) le plus simple est ainsi constitu<74> de
suites de caract<63>res, et de retours <20> la ligne. <20> chaque caract<63>re
correspond un ou plusieurs octets, c'est-<2D>-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 <20><>A<EFBFBD><41> est cod<6F> par le nombre 65 et <20> chaque caract<63>re
correspond un seul octet).
</p>
<p>
2003-09-17 21:16:08 +02:00
Lorsque vous avez un fichier sous un format <20><>texte brut<75><74>, vous
pouvez le modifier avec <em>n'importe quel <a
href="&url.tuteurs;unix/editeurs/"><3E>diteur de texte</a></em>, de
m<EFBFBD>me que pour <20>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 <20> des fichiers au
format texte de respecter certaines r<>gles, une certaine syntaxe. Voici
quelques exemples de t<>ches sp<73>cifiques qui utilisent des fichiers au
format texte brut<75>:
</p>
<h4><3E>crire des pages Web</h4>
<p>
La page Web que vous lisez est au format <tt>HTML</tt> (plus pr<70>cis<69>ment,
il s'agit d'<tt>XHTML 1.0 Strict</tt>). En plus de contenir du texte en
fran<EFBFBD>ais <20><>brut<75><74>, certaines <em>balises</em> permettent de signifier <20>
votre navigateur Web comment il doit afficher la page<67>: une barre de
navigation <20> gauche, nos choix de couleurs, etc... En voici un extrait<69>:
</p>
<pre>
&lt;p&gt;
Quand vous prenez un stylo et un papier et que vous <20>crivez des
lettres, des chiffres, des symboles de ponctuation, par exemple pour
noter un num<75>ro de t<>l<EFBFBD>phone, un cours, une dissertation, une lettre,
n'importe quel autre <20>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 <20>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 <20>lectronique</h4>
<p>
Quand vous envoyez un courrier <20>lectronique avec votre logiciel pr<70>f<EFBFBD>r<EFBFBD>,
celui-ci va envoyer votre message dans un format particulier<65>: les
premi<EFBFBD>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 <20> donner des informations sur
l'exp<78>diteur du message, la date, le sujet, l'encodage utilis<69>, etc...
ainsi que quelques informations techniques. Voici un exemple<6C>:
</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 <20>t<EFBFBD> d<>velopp<70>s dans diff<66>rents
langages<EFBFBD>: C, C++, Perl, Shell, etc...
Les codes sources de ces programmes sont dans un format texte, ce qui ne
les emp<6D>che pas de respecter une syntaxe pr<70>cise. Voici <20> quoi cela
peut ressembler<65>:
</p>
<pre>
/* bonjour.c<>: comment dire <20> Bonjour. <20> en C */
#include &lt;stdio.h&gt;
int main (int argc, char **argv) {
printf("Bonjour.\n");
return(0);
}
</pre>
<pre>
#!/bin/sh
# Comment dire <20> Bonjour. <20> en Shell
exec echo Bonjour.
</pre>
<p>Suivant que le langage est interpr<70>t<EFBFBD> ou compil<69>, il sera ou non
n<EFBFBD>cessaire de convertir votre code source dans un format ex<65>cutable en
utilisant un <em>compilateur</em>.
</p>
<h3>Les formats binaires</h3>
<p> <20> l'oppos<6F> des formats textes, se trouvent les formats binaires.
L'information que l'on stocke dans de tels fichiers ne se r<>sume pas <20>
des suites de caract<63>res.</p>
<p>
Avant de continuer, pr<70>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 <20> quel format on a <20> faire. Attention cependant au fait que
parfois derri<72>re un fichier d'une certaine extension peut se cacher sous
2003-09-25 10:49:28 +02:00
un autre (cf.<2E>le programme
<a href="&url.tuteurs;unix/formats-memo.html#file"><tt>file</tt></a>)<29>!
</p>
<p>Voici bri<72>vement quelques exemples<65>:
</p>
<h4>Images bitmap</h4>
<p>Une image peut-<2D>tre stock<63>e comme une grille de petits
points (pixels), chaque pixel ayant une certaine <20><>couleur<75><72>. Une fois que
l'on a associ<63> certains octets aux diff<66>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 <20>crire la s<>quence d'octets
qui correspond <20> chaque pixel de l'image. Le type de format que je viens
de d<>crire est extr<74>mement rudimentaire (dans cette famille de format, on
trouve le format <tt>bmp</tt> par exemple)<29>; 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<65>: 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<66>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<72>oivent le plus souvent les extensions <code>png</code> et
<code>jpg</code>).
</p>
<h4>Son <20>chantillonn<6E></h4>
<p>C'est comme pour les images<65>: on d<>coupe le son
en intervalles de temps tr<74>s brefs (il y a
le plus souvent autour de quarante
mille intervalles par seconde) et on note la valeur du signal
<EFBFBD>lectrique correspondant, ce qui donne un nombre entier (avec signe)
que l'on peut stocker. Pour un enregistrement en stereo, on note
parall<EFBFBD>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<69>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<6E>res de stocker de la <20><>musique<75><65>, les
fichiers <tt>midi</tt>, o<> ne sont enregistr<74>es que des suites
d'indications sur les notes que les musiciens jouent sur leurs
instruments (d'une certaine mani<6E>re, ces fichiers contiennent
l'information contenue sur une <20><>partition<6F><6E>). Quand vous lisez ces
fichiers avec un programme convenable, un synth<74>tiseur (logiciel ou
mat<EFBFBD>riel) va convertir ces donn<6E>es en un v<>ritable son.
</p>
<p>
<EFBFBD>videmment, la qualit<69> musicale qui sort des hauts-parleurs quand vous
jouez des fichiers <tt>midi</tt> est tr<74>s loin d'<27>tre <20> la hauteur de ce qui
parvient <20> vos oreilles quand vous <20>coutez un orchestre compos<6F> de
musiciens talentueux<75>!
</p>
<h4>Programmes ex<65>cutables</h4>
<p>Suivant la famille du syst<73>me
d'exploitation que vous utilisez (Unix, Windows, Mac), et m<>me <20>
l'int<6E>rieur d'une famille suivant la variante du syst<73>me ou le type de
processeur, les programmes sont stock<63>s dans un format diff<66>rent. La
partie la plus imporante d'un fichier ex<65>cutable est la zone contenant le
<EFBFBD><EFBFBD>langage machine<6E><65> qui grosso modo contient la liste des instructions
qui seront ex<65>cut<75>es par le processeur. On ne modifie pas
directement un fichier ex<65>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<63>res
gras, italiques, etc...), plus pr<70>cis<69>ment, ils utilisent
<em>plusieurs</em> formats<74>: d'une version <20> l'autre, le logiciel
Microsoft Word utilise un format plus ou moins diff<66>rent de la version
pr<EFBFBD>c<EFBFBD>dente, ce qui pose beaucoup de probl<62>mes, surtout si vous n'avez pas
la version <20><>dernier cri<72><69> du logiciel en question.
</p>
<p>
<EFBFBD> l'oppos<6F>, certains traitements de textes utilisent un format texte,
de fa<66>on similaire au format <code>HTML</code> utilis<69> 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 <20>diteur de texte pr<70>f<EFBFBD>r<EFBFBD>, et au moins
vous <20>tre s<>r que le format ne vas pas changer significativement d'une
version <20> l'autre. En voici un <20>chantillon<6F>:
</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 <20>crire un fichier binaire
dans un format particulier <code>dvi</code> qui contient essentiellement
beaucoup d'informations qui ressemblent <20>
<EFBFBD><EFBFBD><EFBFBD> tel endroit de la page num<75>ro 42, afficher MU dans une fonte qui
fait 5.08 cm de hauteur.<2E><>
</p>
<h3>Documents mis en page</h3>
<p>Ce sont des fichiers <20><>pr<70>ts <20> <20>tre imprim<69>s<EFBFBD><73>, ces fichiers
contiennent toutes les instructions que l'on a pratiquement plus qu'<27>
envoyer <20> 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<EFBFBD>j<EFBFBD> <20>voqu<71> ci-desus le format <tt>dvi</tt> utilis<69> par LaTeX. On
dispose aussi du format <tt>pdf</tt> (Portable Document Format) d<>velopp<70>
par Adobe, vous avez tr<74>s certainement d<>j<EFBFBD> rencontr<74> 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<70> par Adobe). Il est depuis
quelques ann<6E>es utilis<69> par la plupart des imprimates. Son grand
avantage est qu'il est en mode texte et qu'il ne fait pas d'hypoth<74>se sur
la r<>solution de l'imprimante par exemple, contrairement aux
formats utilis<69>s auparavant pour envoyer des instructions aux
imprimantes<EFBFBD>! 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<><72>crire 100 fois les m<>mes instructions par exemple).
</p>
<h3>M<>ta-formats</h3>
<h4>Archives</h4>
<p>
Dans certaines situations, il peut <20>tre commode de mettre plusieurs
fichiers dans un seul, on appelle cela une <em>archive</em>. En g<>n<EFBFBD>ral,
au d<>but d'un tel fichier se trouve les noms des fichiers contenus <20>
l'int<6E>rieur avec leur taille (ainsi que d'autres informations
techniques), puis viennent ensuite chacun des fichiers les uns <20> 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<EFBFBD>ralement, on a la notion de syst<73>me de fichiers<72>: il s'agit de
d<EFBFBD>terminer comment organiser les fichiers sur un disque dur et d'inscrire
les m<>ta-informations, <20> savoir d'<27>crire quelque part la liste des
fichiers pr<70>sents sur le disque ainsi que la position sur le disque o<>
ils sont <20>crits. L<>, encore, de nombreuses possibilit<69>s existent<6E>: sous
Linux, on utilise en g<>n<EFBFBD>ral <code>ext2</code>, <code>ext3</code> ou
<code>ReiserFS</code>, sous Windows, il y a des syst<73>mes de fichiers
2003-09-17 21:16:08 +02:00
<code>fat</code>, <code>NTFS</code>, etc...
</p>
<h4>Fichiers compress<73>s</h4>
<p>
Quand on a un fichier un peu long que l'on ne consulte pas
r<EFBFBD>guli<EFBFBD>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<73> est donn<6E> par les fichiers <20><>gzipp<70>s<EFBFBD><73>
(extension <tt>gz</tt>). Ainsi par exemple, un fichier PostScript
<tt>dea.ps</tt>, une fois comprim<69> s'appelle <tt>dea.ps.gz</tt>.
</p>
<p>
Le clou du spectacle s'obtient en combinant les deux m<>ta-formats <20>voqu<71>s
ci-dessus<75>: comprimer un fichier d'archive comprenant plusieurs
fichiers. On obtient alors un fichier <code>.tar.gz</code> (que certains
abr<EFBFBD>gent en <code>.tgz</code>)<29>; c'est un g<>n<EFBFBD>ral sous cette forme que
l'on peut t<>l<EFBFBD>charger le code source de la plupart des logiciels libres.
</p>
<div class="metainformation">
Auteur<EFBFBD>: Jo<4A>l Riou.
2003-09-25 10:49:28 +02:00
Derni<EFBFBD>re modification le <date value="$Date: 2003-09-25 08:49:29 $" />.
</div>
</body>
</html>