SupLastByte
L'extrait de code peut être consulté sans aucune authentification.
Rédigé par
Thomas "Oxymore" Kowalski
suplastbyte-libc.c 1,64 Kio
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(int argc, char** argv) {
if (argc < 2)
{
printf("%s usage: %s file\n", argv[0], argv[0]);
exit(EXIT_FAILURE);
}
char* fichier = argv[1];
FILE *f;
char *contenu;
/* Ouverture du fichier */
if (!(f = fopen(fichier, "r")))
{
printf("Impossible d'ouvrir %s en lecture : %s.\n", fichier, strerror(errno));
exit(EXIT_FAILURE);
}
/* Détermination de la taille */
fseek(f, 0, SEEK_END);
int taille = ftell(f);
/* Si le fichier est vide, on s'arrête. */
if (taille == 0) return 0;
/* Si le fichier a une taille négative, il y a une erreur ! */
if (taille < 0)
{
printf("Erreur lors de l'appel à fseek : %s.\n", strerror(errno));
exit(EXIT_FAILURE);
}
/* On alloue la mémoire pour lire le fichier */
contenu = (char*) malloc((taille) * sizeof(char));
/* On se remet au début pour lire */
fseek(f, 0, SEEK_SET);
/* On n'essaie de lire que si on veut lire au moins un caractère */
if (taille - 1 > 0)
{
/* On lit */
if (!(fread(contenu, 1, taille - 1, f)))
{
printf("Erreur lors de la lecture : %s.\n", strerror(errno));
exit(EXIT_FAILURE);
}
}
fclose(f);
/* On rouvre le fichier pour écriture */
f = fopen(fichier, "w");
/* On n'essaie d'écrire que si on a au moins un caractère à écrire. */
if (taille - 1 > 0)
{
/* On écrit le tout sauf le dernier octet */
if(!(fwrite(contenu, 1, taille - 1, f)))
{
printf("Erreur lors de l'écriture : %s.\n", strerror(errno));
exit(EXIT_FAILURE);
}
}
fclose(f);
return 0;
}
Veuillez vous inscrire ou vous se connecter pour commenter