#define _POSIX_C_SOURCE 200112L #include #include #include #include #include #include #include #include "err.h" #define NBTIMES 1000000 int main(int argc, char **argv) { int d, nb; if (argc!= 3) { fprintf(stderr, "Usage: %s \n" "Ecrit %d fois la chaine dans le fichier\n" "A tester en lancant deux processus concurrents\n" "On observe que des écritures sont perdues. Pourquoi ?\n" "Que se passe-t-il si on ouvre le fichier en mode O_RDWR|O_CREAT|O_APPEND ?\n" "Exercice: implementer le lancement concurrent par 2 threads ou 2 processus\n", argv[0], NBTIMES); exit(EXIT_FAILURE); } if ((d = open(argv[1], O_RDWR|O_CREAT, 0644)) < 0) FATAL("open"); nb = strlen(argv[2]); for (int i =0 ; i < NBTIMES ; i++) { lseek(d, 0, SEEK_END); if (write(d, argv[2], nb)<0) FATAL("write"); } exit(EXIT_SUCCESS); }