Files
BUT2/TP_SCR3.1/TP_Fichiers/cp_syscall.c

50 lines
2.1 KiB
C
Raw Normal View History

2025-10-23 14:28:03 +02:00
#include <stdio.h> // pour perror() et printf() : fonctions daffichage
#include <stdlib.h> // pour exit() : permet de quitter le programme en cas derreur
#include <fcntl.h> // pour open() : ouverture de fichiers
#include <unistd.h> // pour read(), write(), close() : appels systèmes bas niveau
int main() {
int source, dest; // "descripteurs de fichiers" : nombres entiers utilisés par le système
char c; // variable qui va contenir un caractère (1 octet) lu depuis le fichier
// Ouvrir le fichier source en lecture seule (O_RDONLY)
source = open("source.txt", O_RDONLY);
if (source < 0) { // si la valeur < 0, cest que louverture a échoué
perror("Erreur ouverture source"); // affiche lerreur système
exit(1); // quitte le programme avec un code derreur
}
// Créer (si nexiste pas) ou ouvrir le fichier destination en écriture
// O_WRONLY = écriture seule
// O_CREAT = créer le fichier si nexiste pas
// O_TRUNC = vider le fichier sil existe déjà
// 0644 = permissions du fichier (rw-r--r--)
dest = open("dest.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (dest < 0) { // si louverture échoue
perror("Erreur ouverture destination");
close(source); // on ferme quand même le fichier source ouvert
exit(1);
}
// Lire et écrire le fichier octet par octet
// read(source, &c, 1) lit 1 octet du fichier source et le stocke dans c
// la boucle continue tant que read() lit bien 1 octet
while (read(source, &c, 1) == 1) {
// écrire cet octet dans le fichier destination
if (write(dest, &c, 1) != 1) { // si write() échoue
perror("Erreur écriture");
close(source);
close(dest);
exit(1);
}
}
// Fermer les deux fichiers
close(source);
close(dest);
// Indiquer à lutilisateur que tout sest bien passé
printf("Copie terminée (méthode appels système).\n");
return 0; // programme terminé correctement
}