changement du fichier tp scr
This commit is contained in:
46
TP_SCR3.1/TP_Fichiers/cp_stdio_ultra.c
Normal file
46
TP_SCR3.1/TP_Fichiers/cp_stdio_ultra.c
Normal file
@@ -0,0 +1,46 @@
|
||||
#include <stdio.h> // pour printf, fprintf, fopen, fread, fwrite, fclose
|
||||
#include <stdlib.h> // pour exit()
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
FILE *source, *dest; // pointeurs de fichiers
|
||||
char c; // variable pour stocker un octet lu
|
||||
|
||||
// Vérifier que l'utilisateur a bien fourni deux arguments (source et destination)
|
||||
if (argc != 3) {
|
||||
fprintf(stderr, "Usage: %s <fichier_source> <fichier_dest>\n", argv[0]);
|
||||
exit(1); // quitte le programme avec code d'erreur
|
||||
}
|
||||
|
||||
// Ouvrir le fichier source en mode lecture binaire ("rb")
|
||||
source = fopen(argv[1], "rb");
|
||||
if (source == NULL) { // si l'ouverture échoue
|
||||
perror("Erreur ouverture source");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Ouvrir ou créer le fichier destination en mode écriture binaire ("wb")
|
||||
dest = fopen(argv[2], "wb");
|
||||
if (dest == NULL) { // si l'ouverture échoue
|
||||
perror("Erreur ouverture destination");
|
||||
fclose(source); // on ferme le fichier source déjà ouvert
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Lire un octet depuis le fichier source puis l'écrire dans le fichier destination
|
||||
while (fread(&c, 1, 1, source) == 1) {
|
||||
if (fwrite(&c, 1, 1, dest) != 1) {
|
||||
perror("Erreur écriture");
|
||||
fclose(source);
|
||||
fclose(dest);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Fermer les deux fichiers
|
||||
fclose(source);
|
||||
fclose(dest);
|
||||
|
||||
// Indiquer que la copie s'est terminée correctement
|
||||
printf("Copie terminée (méthode stdio).\n");
|
||||
return 0; // programme terminé sans erreur
|
||||
}
|
||||
49
TP_SCR3.1/TP_Fichiers/cp_syscall.c
Normal file
49
TP_SCR3.1/TP_Fichiers/cp_syscall.c
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <stdio.h> // pour perror() et printf() : fonctions d’affichage
|
||||
#include <stdlib.h> // pour exit() : permet de quitter le programme en cas d’erreur
|
||||
#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, c’est que l’ouverture a échoué
|
||||
perror("Erreur ouverture source"); // affiche l’erreur système
|
||||
exit(1); // quitte le programme avec un code d’erreur
|
||||
}
|
||||
|
||||
// Créer (si n’existe pas) ou ouvrir le fichier destination en écriture
|
||||
// O_WRONLY = écriture seule
|
||||
// O_CREAT = créer le fichier si n’existe pas
|
||||
// O_TRUNC = vider le fichier s’il 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 l’ouverture é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 à l’utilisateur que tout s’est bien passé
|
||||
printf("Copie terminée (méthode appels système).\n");
|
||||
return 0; // programme terminé correctement
|
||||
}
|
||||
0
TP_SCR3.1/TP_Fichiers/untitled
Normal file
0
TP_SCR3.1/TP_Fichiers/untitled
Normal file
Reference in New Issue
Block a user