Information

Author(s) Olivier Martin, Cyril Pletinckx, Minh-Phuong Tran
Deadline Keine Frist
Abgabenlimit No limitation

Einloggen

Copie de fichier

Ecrivez une fonction permettant de copier un fichier quelconque. Votre fonction ne peut bien entendu pas modifier le fichier source.

Vous pouvez uniquement utiliser les fonctions open(2), mmap(2), munmap(2), msync(2), ftruncate(3), fstat(2), memcpy(3) and close(2). Vous ne pouvez appeler memcpy(3) qu'une seule fois.

Astuce : msync(2) est une fonction qui vous permet de garantir que les modifications faites en mémoire (notamment celles à une adresse pointée par mmap) seront aussi sauvées sur disque. Lisez la documentation pour voir comment l'utiliser correctement.

Astuce : La fonction ftruncate(3) est une fonction que l'on utilise assez rarement, mais elle est nécessaire pour cette question.


Question 1:

Ecrivez ici le corps de la fonction

/*
 * @pre file_name != NULL, nom du fichier source
 *      new_file_name != NULL, nom du fichier destination (la copie)
 *
 * @post copie le contenu de  {file_name} vers {new_file_name}.
 *       return 0 si la fonction se termine avec succès, -1 en cas d'erreur.
 */
int copy(char *file_name, char *new_file_name) {
Question 2: Fonctions supplémentaires

Insérez ici les fonctions supplémentaires éventuelles dont vous avez besoin.

Question 3: Fonction de test

Insérez votre code de test optionnel ci-dessous. Vous pouvez utiliser printf dans cette fonction pour débugger votre programme. Vous pouvez utiliser void gen_file(int n) pour générer un fichier nommé file.txt avec comme contenu les octets comprient dans [0, n[.

void test_func(void) {