/* * *** Listing 1-6 *** * * Programme pour calculer la somme(checksum) sur 16 bits d'un flux d'octets * d'un fichier spécifié. Effectue le tamponnage en interne, à la place * de C ou du DOS, la partie critique est écrite * en assembleur optimisé. */ #include #include #include /* alloc.h pour compilateur Borland, malloc.h pour compilateur Microsoft */ #define BUFFER_SIZE 0x8000 /* tampon de données 32K*/ main(int argc, char *argv[]) { int Handle; unsigned int Checksum; unsigned char *WorkingBuffer; int WorkingLength; if ( argc != 2 ) { printf("syntaxe: nom_du_fichier\n"); exit(1); } if ( (Handle = open(argv[1], O_RDONLY | O_BINARY)) == -1 ) { printf("Impossible ouvrir le fichier: %s\n", argv[1]); exit(1); } /* Récupère de la mémoire pour chaque tampon de données */ if ( (WorkingBuffer = malloc(BUFFER_SIZE)) == NULL ) { printf("Impossible d'allouer la mémoire\n"); exit(1); } /* Initialise la somme */ Checksum = 0; /* Traitement par blocs 32K */ do { if ( (WorkingLength = read(Handle, WorkingBuffer, BUFFER_SIZE)) == -1 ) { printf("Erreur de lecture du fichier %s\n", argv[1]); exit(1); } /* Somme de ce bloc s'il n'est pas vide*/ if ( WorkingLength ) { ChecksumChunk(WorkingBuffer, WorkingLength, &Checksum); } } while ( WorkingLength ); /* Reporte le résultat */ printf("La somme est: %u\n", Checksum); exit(0); }