Title: Gestion de Fichiers
1Gestion de Fichiers
- Operations de Base en C sur les Fichiers
-
2Plan du cours daujourdhui
- Fichiers logiques vs. fichiers physiques
- Ouverture et fermeture des fichiers
- Lecture, écriture et recherche
- Caractères speciaux
- La structure du répertoire de lUnix
- Périphériques et fichiers logiques
- Gestion de fichiers en Unix
3Ouverture de fichiers
- Une fois que lidentificateur du fichier logique
est connecté à un fichier physique ou à un
périphérique, il est nécessaire de déclarer ce
que lon compte faire avec le fichier - Ouvrir un fichier existant
- Creer un nouveau fichier
- Le fichier est pret à être utilisé par le
programme. - On est positionné au début du fichier qui est
maintenant prêt à la lecture/ écriture.
4Ouverture de fichiers en C
- FILE outfile
- outfile fopen (monfichier.txt,w)
- Le premier argument indique le nom du fichier et
le second le mode douverture. - Le mode peut être r, w, a, r, w,
a.
5Ouverture de fichiers en C
- fstream outfile
- Outfile.open (monfichier.txt,iosout)
- Le second argument indique le mode. Sa valeur est
calculée en appliquant loperateur
(bitweise or) sur des constantes prédéfinies
dans la classe ios. - Ces constantes sont iosin, iosout,
iosapp, iostrunc, iosnocreate,
iosnoreplace, iosbinary, etc.
6Fichier logique vs. fichier physique
- Fichier Physique collection doctets sauvegardés
sur un disque ou sur une bande magnétique - Fichier Logique Canal (analogie ligne
téléphonique) cachant les détails de la
localisation et des caractéristiques physiques
au programme - Lorsquun programme veut utiliser un fichier
particulier, data, le système dexploitation
doit trouver le fichier physique appelé data et
établir la connection en lui affectant un fichier
logique. Le nom de ce dernier est celui utilisé
dans le programme.
7Fichier logique vs. physique C et C
- En C, a fichier logique est déclaré comme suit
-
- FILE outfile
- En C, cest fait comme ceci
- fstream outfile
-
- Ici, ce nom est déclaré comme un objet de la
classe - fstream.
- Dans les deux langues, le nom logique outfile
sera associé plutard à un nom physique.
8Fermeture de fichiers
- Permet au nom logique du fichier dêtre utilisé
par un autre fichier physique (cest comme
raccrocher le téléphone après un appel). - Garantit que tout ce qui a été ecrit dans le
fichier est en effet sauvegardé - Les fichiers sont généralement fermés
automatiquement par le système dexploitation (à
moins que le programme ait été anormalement
interrompu). - En C fclose(outfile)
- En C outfile.close()
9Lecture
- Read(Source_file, Destination_addr, Size)
- Source_file location à laquelle le programme
commence sa lecture (i.e., son nom de fichier
logique) - Destination_addr la première addresse du bloc
de mémoire dans lequel les données seront
sauvegardées - Size la quantité dinformation arrivant du
fichier (le nombre doctets -- MBs)
10Lecture en C
- char c // un charactère
- char a100 // un array avec 100 charactères
- FILE infile
- infile fopen("monfichier,"r")
- fread(c,1,1,infile) / lis un charactère /
- fread(a,1,10,infile) / lis 10 charactères
/ - Argument de fread
- 1er argument adresse de destination (adresse
de c) - 2ème argument taille de lélément en bytes (un
char 1 byte) - 3ème argument nombre délément à lire
- 4ème argument nom logique du fichier à lire
11Lecture en C
- char c // un charactère
- char a100 // un array avec 100 charactères
- fstream infile
- infile.open("monfichier,iosin)
- infile gtgt c // lis un charactère
- infile.read(c,1) // une autre manière de
lire un char. - infile.read(a,10) // lis 10 charactères
- Note C fournit une méthode read correspondant
à - la fonction read de C.
12Ecriture
- Write(Destination_file, Source_addr, Size)
- Destination_file le nom du fichier logique dans
lequel les données seront écrites - Source_addr la première addresse du bloc de
mémoire dans lequel les données qui vont être
écrites sont sauvegardées - Size Le nombre doctets qui seront écrits dans
le fichier
13Ecriture en C
- char c char a100
- FILE outfile
- outfile fopen("mynew.txt","w")
- / Nous omettons dinitialiser c et a /
- fwrite(c,1,1,outfile)
- fwrite(a,1,10,outfile)
14Ecriture en C
- char c char a100
- fstream outfile
- outfile.open("mynew.txt",iosout)
- // Nous omettons dinitialiser c et a
- outfile ltlt c
- outfile.write(c,1)
- outfile.write(a,10)
15Détection de la fin dun fichier
- Tester si un fichier est à la fin comme suit
- En C
- int i
- i fread(c,1,1,infile) // essaie de
lire - if (i0) // true si le fichier est à la
fin - .
- En C
- infile gtgt c // essaie de lire
- if (infile.fail()) // true si le fichier
est à la fin - ...
16Recherche
- La lecture nest pas confinée un processus
séquentiel un saut peut être fait à des
locations spécifiques dans le fichier ou jusquau
bout du fichier afin dy ajouter (append) de
linformation. - Un déplacement direct jusquà une position
spécifique dans un fichier sappelle recherche
(seeking). - Seek(Source_file, Offset)
- Source_file le nom du fichier logique dans
lequel la recherche va pendre place. - Offset le nombre de positions dans le fichier
que le pointeur dépassera à partir du début du
fichier.
17Programme manipulant des fichiers
- Exemple de programme pour afficher le contenu
dun fichier sur lécran version C - include ltstdio.hgt
- main()
- char ch
- FILE infile
- infile fopen("A.txt","r")
- while (fread(ch,1,1,infile) ! 0)
- fwrite(ch,1,1,stdout)
- fclose(infile)
-
18Programme version C
- include ltfstream.hgt
- main()
- char ch
- fstream infile // declare un nom logique
- infile.open("A.txt",iosin) // attache le
nom logique a un nom physique - infile.unsetf(iosskipws) // flag pour
inlure les blanks dans la lecture - infile gtgt ch
- while (! infile.fail())
- cout ltlt ch
- infile gtgt ch
-
- infile.close()
-
-
19Caractères spéciaux
- Parfois, le système dexploitation essaie de
rendre la vie des usagers reguliers plus facile
en ajoutant ou effacant certains caractères
automatiquement. - Ces modifications, néanmoins, rendent la vie des
programmeurs bien plus compliquée. - Il est important de se souvenir que de telles
situations peuvent fréquemment arriver.
20Caractères spéciaux exemples
- Control-Z est ajouté à la fin de tous les
fichiers MS-DOS. Ceci est fait pour signaler la
fin dun fichier. - ltCarriage-ReturngtltLine-Feedgt sont ajoutés à la
fin de chaque lignes de fichiers MS-DOS. - ltCarriage-Returngt est effacé et remplacé par le
nombre de caractères par ligne de texte dans les
fichiers VMS.
21La structure du répertoire de lUnix
- Un grand système informatique contient de
nombreux fichiers (parfois des milliers). Ces
fichiers doivent être organisés. Dans un système
dexploitation, cette organisation sappelle le
système de fichiers (file system). - Le système de fichiers de lUnix est une
organisation des répertoires en arbre. La racine
de larbre est représentée par le caractère /
(slash. - Chaque répertoire contient des fichiers réguliers
et/ou dautres répertoires. - Le nom dun fichier sauvegardé dans un répertoire
Unix correspond à son nom physique.
22La structure du répertoire de lUnix (suite)
- Chaque fichier peut être identifié de façon
unique en donnant son cheminement absolu
(absolute path). Par example
/homes/kiringa/courses/csi2511. - Le répertoire dans lequel vous êtes situé
sappelle le répertoire courant (current
directory). - On peut aussi se réferrer à un fichier par son
cheminement (path) relatif au répertoire
courant. - . signifie le répertoire courant et ..
signifie le répertoire parent (parent
directory).
23Péripheriques et fichiers logiques
- Unix a une vue très générale de ce quest un
fichier pour Unix, un fichier est une séquence
doctets dont ni la location de stockage ni la
provenance ne sont importantes. - Les disques ou cassettes magnétiques peuvent être
assimilés à des fichiers. De même pour le clavier
et la console. - Quelle que soit la forme physique dun fichier en
Unix (que ce soit un fichier réel ou un
périphérique), il est représenté de la même
façon par un entier.
24stdout, stdin, stderr
- stdout ? console
- fwrite(ch, 1, 1, stdout) ou
- cout ltlt ch
- stdin ? clavier
- fread(ch, 1, 1, stdin) ou
- cin gtgt ch
- stderr ? erreur standard (en fait, la console)
- Lorsque le compilateur détecte une erreur, le
message derreur est écrit dans ce fichier
25Redirection et pipes dentrée/sortie
- lt nom_de_fichier -- rediriger stdin dans
-
nom_de_fichier - gt nom_de_fichier -- rediriger stdout dans
-
nom_de_fichier - Example a.out lt mon_entrée gt ma_sortie
- Programme1 Programme2 -- prend le stdout
- de Programme1 et
lutilise - comme stdin pour
Programme2 - Example list sort
26Commandes usuelles de fichiers en Unix
- cat filenames -- Imprime le contenu des fichiers
nommés - tail filename -- Imprime les 10 dernières lignes
du fichier - cp file1 file2 -- copie file1 dans file2
- mv file1 file2 -- déplace (renomme) file1 dans
file2 - rm filenames -- efface les fichiers nommés
- chmod mode filename -- change le mode de
protection -
des fichiers nommés - ls -- Liste le contenu du répertoire
- mkdir name -- crée un répertoire avec le nom
donné - rmdir name -- efface le répertoire nommé