/* Programme mettant les lignes du fichier toto.txt Sens Dessus Dessous (SDD). * Dans le fichier résultat (totoSdd.txt, la 1ère ligne de toto.txt se * retrouve en dernier, la 2ème ligne en avant-dernière position... * Dans cette version, le programme suppose que toto.txt est constitué de 6 * lignes de 8 caractères (NB : le 8ème caractère de chaque ligne est le '\n'). */ #include #include #include #include #include #include #include #define NBLIGNE 6 #define NBCAR 8 typedef char ligne_t[NBCAR]; typedef ligne_t tabLigne_t[NBLIGNE]; int main() { int source, dest; tabLigne_t *tabLigne; int i; source = open("./toto.txt", O_RDONLY); if (source < 0) { perror("open toto.txt"); exit(1); } tabLigne = (tabLigne_t *)mmap(0, sizeof(tabLigne_t), PROT_READ, MAP_PRIVATE, source, 0); if (tabLigne == MAP_FAILED){ perror("mmap"); exit(1); } dest = open("./totoSdd.txt", O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR); if (dest < 0) { perror("open toto.txt"); exit(1); } for (i = NBLIGNE-1 ; i >= 0 ; i--) { int nbWrite; nbWrite = write(dest, (*tabLigne)[i], sizeof((*tabLigne)[i])); if (nbWrite != sizeof((*tabLigne)[i])){ if (nbWrite < 0) { perror("write"); exit(1); } else { printf("On a ecrit moins de caractères que requis (disque plein ?)\n"); exit(1); } } } return 0; }