/* programme pour compter les mots. Testé avec Borland C++ compilé en C en modèle small */ #include #include #include #include #include #define BUFFER_SIZE 0x8000 /* taille max du block */ int main(int, char **); void ScanBuffer(char *, unsigned int, char *, unsigned long *); int main(int argc, char **argv) { int Handle; unsigned int BlockSize; long FileSize; unsigned long WordCount = 0; char *Buffer, CharFlag = 0; if (argc != 2) { printf("syntaxe: wc \n"); exit(1); } if ((Buffer = malloc(BUFFER_SIZE)) == NULL) { printf("ne peut pas allouer la mémoire adéquate\n"); exit(1); } if ((Handle = open(argv[1], O_RDONLY | O_BINARY)) == -1) { printf("ne peut pas ouvrir le fichier %s\n", argv[1]); exit(1); } if ((FileSize = filelength(Handle)) == -1) { printf("Erreur de taille de fichier %s\n", argv[1]); exit(1); } CharFlag = 0; while (FileSize > 0) { FileSize -= (BlockSize = min(FileSize, BUFFER_SIZE)); if (read(Handle, Buffer, BlockSize) == -1) { printf("Erreur de lecture du fichier %s\n", argv[1]); exit(1); } ScanBuffer(Buffer, BlockSize, &CharFlag, &WordCount); } /* Traite le dernier mot, si nécessaire */ if (CharFlag) { WordCount++; } printf("\nbre Total de mots dans le fichier: %lu\n", WordCount); return(0); }