Précédent Remonter Suivant

2  Nouvelle implantation de la commande cp

Il s'agit de définir une nouvelle implantation, plus efficace, de la commande cp de copie de fichier. On se limite à la copie d'un fichier source unique dans un fichier destination.

La version 2.4 du noyau Linux introduit, comme d'autres systèmes, un appel système non standard sendfile() pour réaliser efficacement la copie d'un fichier. Le prototype de cet appel système est le suivant :
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
Cet appel système copie des données entre un descripteur de fichier et un autre. Le descripteur in_fd doit être ouvert en lecture, et out_fd en écriture. Le pointeur offset doit correspondre à une variable contenant la position dans le fichier d'entrée à partir de laquelle sendfile() commencera la lecture. Lorsque la routine se termine, cette variable pointée par offset est remplie avec la position de l'octet immédiatement après le dernier octet lu. L'argument count est le nombre d'octets à copier entre les descripteurs de fichiers. La fonction retourne le nombre d'octets écrits, -1 en cas d'erreur.

Exercice 5
   Donnez le principe et le code C d'une implantation d'une fonction copy_file() à l'aide de sendfile() ; la fonction

int copy_file(const char *src, const char *dst);
copiant d'un fichier source de nom src dans un fichier destination de nom dst.

L'introduction de l'appel système sendfile() a été motivée par une double considération :

Exercice 6
   Pour chacun des deux points : transfert mémoire, et changement de mode du processeur, explicitez en quoi l'introduction de l'appel système sendfile() rend plus efficace la réalisation de copie de fichiers.


Précédent Remonter Suivant