update
This commit is contained in:
87
DEV.1.1/CM3TEST/cm3B.1.c
Normal file
87
DEV.1.1/CM3TEST/cm3B.1.c
Normal file
@@ -0,0 +1,87 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define TEMP_FILE_NAME "tempfile.tmp"
|
||||
#define MESSAGE "Kilroy was here\n"
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
FILE *file, *tempFile;
|
||||
char buffer[1024];
|
||||
size_t bytesRead;
|
||||
size_t messageLength = 0;
|
||||
const char *messagePtr = MESSAGE;
|
||||
|
||||
while (messagePtr[messageLength] != '\0') {
|
||||
messageLength++;
|
||||
}
|
||||
|
||||
/* Vérification des arguments */
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Usage: %s <chemin_du_fichier>\n", argv[0]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* Ouverture du fichier original en lecture-écriture */
|
||||
file = fopen(argv[1], "r+");
|
||||
if (file == NULL) {
|
||||
perror("Erreur d'ouverture du fichier");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* Création d'un fichier temporaire */
|
||||
tempFile = tmpfile();
|
||||
if (tempFile == NULL) {
|
||||
perror("Erreur de création du fichier temporaire");
|
||||
fclose(file);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* Écriture du message dans le fichier temporaire */
|
||||
if (fwrite(MESSAGE, 1, messageLength, tempFile) != messageLength) {
|
||||
perror("Erreur d'écriture dans le fichier temporaire");
|
||||
fclose(file);
|
||||
fclose(tempFile);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* Copier le contenu du fichier original dans le fichier temporaire */
|
||||
while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0) {
|
||||
if (fwrite(buffer, 1, bytesRead, tempFile) != bytesRead) {
|
||||
perror("Erreur d'écriture dans le fichier temporaire");
|
||||
fclose(file);
|
||||
fclose(tempFile);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Retour au début des fichiers */
|
||||
rewind(tempFile);
|
||||
rewind(file);
|
||||
|
||||
/* Copier le contenu du fichier temporaire dans le fichier original */
|
||||
while ((bytesRead = fread(buffer, 1, sizeof(buffer), tempFile)) > 0) {
|
||||
if (fwrite(buffer, 1, bytesRead, file) != bytesRead) {
|
||||
perror("Erreur d'écriture dans le fichier original");
|
||||
fclose(file);
|
||||
fclose(tempFile);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tronquer le fichier au cas où il serait plus grand que le contenu écrit */
|
||||
if (fflush(file) != 0 || ftruncate(fileno(file), ftell(file)) != 0) {
|
||||
perror("Erreur lors de la troncation du fichier");
|
||||
fclose(file);
|
||||
fclose(tempFile);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* Fermeture des fichiers */
|
||||
fclose(file);
|
||||
fclose(tempFile);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
/*gcc -ansi -pedantic -o graffiti graffiti.c
|
||||
./graffiti chemin_du_fichier*/
|
Reference in New Issue
Block a user