« Programmation POSIX/Fichiers » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Ouverture : (orth)
WB:RD : ! orthographe/grammaire
Ligne 1 :
{{Programmation POSIX}}
Nous allons ici expliquer comment accèderaccéder au contenu des fichiers : comment ouvrir et fermer un fichier, lire et écrire dans un fichier, etc. Pour pouvoir manipuler le contenu d'un fichier, il faut utiliser un ''descripteur de fichier ouvert''. Ce descripteur est un simple entier qui sera obtenu en utilisant la fonction d'ouverture de fichier et qui sera ensuite utilisé par toutes les autres fonctions manipulant les fichiers.
 
== Ouverture ==
Ligne 15 :
L'appel système ''open'' convertit un chemin vers un fichier en descripteur de fichier ouvert. Ce qui revient suivant les ''options'' fournies à créer un nouveau fichier ou à en ouvrir un existant en lecture et/ou en écriture. Les valeurs possibles pour ''options'' sont des ''ou binaire'' entre '''O_RDONLY''', '''O_WRONLY''' ou '''O_RDWR''' et une ou plusieurs des constantes symboliques suivantes :
* '''O_CREAT''', créé le fichier s'il n'existe pas. Les droits du fichier sont ceux spécifiés dans l'argument ''mode'' ;
* '''O_EXCL''', à utiliser en conjonction avec '''O_CREAT''', provoque l'échec de l'appel si le fichier existe déjadéjà ;
* '''O_TRUNC''', si le fichier existe, est régulier et est ouvert en écriture, le fichier est tronqué à la longueur nulle (il est vidé) ;
* '''O_APPEND''', le fichier est ouvert en mode ajout : la tête de lecture est placée à la fin du fichier.
Ligne 74 :
</source>
 
L'appel système ''read'' lit au plus ''nombre'' octets depuis le descripteur de fichier ''fd'' et les place dans le ''buffer''. En cas d'erreur, ''read'' renvoie -1, sinon le nombre d'octets réellement lus est renvoyé. L'argument ''nombre'' peut être nul auqelauquel cas rien n'est lu et ''read'' renvoie 0, par contre il doit être inférieur à '''SSIZE_MAX'''.
 
'''Remarque :''' Il est beaucoup plus intéressant, au niveau des performances, de lire de grandes quantités de données et de minimiser le nombre d'appels à ''read'' que de lire le fichier ''petits bouts par petits bouts'' (le pire étant de lire le fichier caractère par caractère).
Ligne 90 :
 
=== Exemple lecture/écriture ===
Le programme suivant utilise tout ce que l'on a vu précédementprécédemment pour réaliser un programme permettant de copier un fichier (tel l'utilitaire Unix <code>cp</code>). Le programme prend deux arguments : le fichier source et le fichier destination et recopie le premier dans le second en utilisant les fonctions ''read'', ''write'' et un buffer de 100 octets (en fait de 100 caractères, en supposant que le type caractère correspond bien à un octet).
 
<source lang="c">
Ligne 142 :
}
 
/* Fermeture des fichiers et fin du programeprogramme */
close(source);
close(destination);
Ligne 157 :
</source>
 
L'appel système ''lseek'' permet de modifier la position courante dans un fichier en la déplacantdéplaçant d'une certaine ''quantité'' à partir d'un point de ''départ''. Ce point de départ peut être :
* '''SEEK_SET''', le déplacement est effectué à partir du début du fichier ;
* '''SEEK_CUR''', le déplacement est effectué à partir de la position courante ;