Skip to content
Extraits de code Groupes Projets

SupLastByte

  • Cloner avec SSH
  • Cloner avec HTTPS
  • Intégrer
  • Partager
    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;
    	
    }
    0% Chargement en cours ou .
    You are about to add 0 people to the discussion. Proceed with caution.
    Terminez d'abord l'édition de ce message.
    Veuillez vous inscrire ou vous pour commenter