/* Programme de creation du fichier d'index utilise par gl * Syntaxe : * gli nomFichier * * Résultat : * Fichier nomFichier.idx contenant l'index */ #include #include #include int main(int argc, char *argv[]) { FILE *source; FILE *idx; char nameIdx[1024]; char ligne[1025]; /* On suppose que les lignes font au plus 1024 caractères (1025-sizeof('\0') */ int offset; int nbElemEcrit; if (argc != 2) { fputs("USAGE = gli nomFichier\n", stderr); exit(1); } /* Ouverture source */ source = fopen(argv[1], "r"); if (source == NULL){ perror("fopen source"); exit(1); } /* Ouverture destination */ strcat(strcpy(nameIdx,argv[1]), ".idx"); idx = fopen(nameIdx, "w"); if (idx == NULL){ perror("fopen idx"); exit(1); } /* Initialisation du fichier d'index : on écrit le 0x00000000 pour la * première ligne. */ offset = 0; nbElemEcrit = fwrite((void*)&offset, sizeof(offset), 1, idx); if (nbElemEcrit < 1) { fputs("Erreur d'ecriture 1\n", stderr); exit(2); } while (fgets(ligne, sizeof(ligne), source) != NULL) { offset += strlen(ligne); nbElemEcrit = fwrite((void*)&offset, sizeof(offset), 1, idx); if (nbElemEcrit < 1) { fputs("Erreur d'ecriture 2\n", stderr); exit(2); } } if (fclose(source) < 0){ perror("fclose source"); exit(1); } if (fclose(idx) < 0){ perror("fclose idx"); exit(1); } return 0; }