print · rss · source

< Types de données composés et type dérivés | TutoCFrench | Le préprocesseur >


Les fonctions de manipulation de fichiers

Notions :

  • open()
  • read()
  • write()
  • close()

Ouverture et fermeture d'un fichier

Avant de pouvoir lire ou écrire dans un fichier, il faut ouvrir celui-ci avec l'appel à la fonction open() dont la syntaxe est la suivante :

int open(const char *nom, int oflag, mode_t mode);

Cette fonction ouvre le fichier nom et retourne un descripteur de fichier qui permettra de l'identifier dans toutes les autres fonctions (lecture, écriture, déplacement, etc.). En cas d'echec, elle retourne -1.

Le paramètre oflag précise le mode d'ouverture du fichier :

  • O_RDONLY : ouverture en lecture seule
  • O_WRONLY : ouverture en écriture seule
  • O_RDWR : ouverture en lecture et écriture
  • O_NDELAY : ouverture non bloquante
  • O_APPEND : positionnement en fin de fichier avant chaque écriture
  • O_CREAT : création du fichier si il n'existe pas
  • O_TRUNC : ouverture avec troncature si le fichier existe
  • O_EXCL : ouverture exclusive (retourne un code d'erreur si le fichier existe déja lors d'une création)

Le paramètre mode définit les droits d'accès au fichier en cas de création (dans les autres cas, il n'est nécessaire de positionner ce paramètre).

On referme un fichier avec la fonction close() :

int close(int fd);

Cette fonction referme le fichier dont le descripteur est fd. En cas de réussite, elle retourne 0, sinon elle retourne -1.

Lecture

La lecture dans un fichier se fait par la fonction read() :

ssize_t read(int fd, void *buffer, size_t n);

Cette fonction lit n octets dans le fichier dont le descripteur est fd et les place dans un buffer. En cas de réussite, elle renvoie le nombre d'octets transferés, sinon elle retourne -1.

Un exemple : lire le fichier /etc/passwd

#include<fcntl.h>

int main()
{
    char c;
    int fd;

    fd =  open("/etc/passwd", O_RDONLY);
    if(fd == -1){         
        fprintf(stderr,"impossible d'ouvrir le fichier\n");
        exit(1);
    }

    while( read(fd, &c, 1) > 0 )
        putchar(c);

    close(fd);

    return 0;
}

Écriture

L'écriture dans un fichier se fait par la fonction write() :

ssize_t write(int fd, const void *buffer, size_t n);

Cette fonction écrit n octets dans le fichier dont le descripteur est fd à partir d'un buffer. Cette fonction retourne le nombre d'octets écrits ou -1 en cas d'erreur :

#include<fcntl.h>

int main()
{
    char buf[]="hello world !\n";
    int fd;

    fd =  open("foo", O_CREAT | O_RDWR, 0644);
    write(fd, buf, sizeof buf);

    return 0;
}

Exercices

  1. "nbline.c" : programme qui compte les lignes d'un fichier.
  2. "wc.c" : programme qui émule la commande wc.
  3. "accolade.c" : programme qui compte le nombre d'accolades fermantes et ouvrantes d'un code source en C. Il signale une erreur si les deux nombres obtenus ne sont pas identiques.
  4. "comment.c" : programme qui supprime les commentaires (/* */).

< Types de données composés et type dérivés | TutoCFrench | Le préprocesseur >

print · rss · source
Page last modified on January 30, 2008, at 02:21 PM