• [^] # Re: En passant...

    Posté par . En réponse au message shm_open() référence indifinie !!!. Évalué à 2.

    C'est vrai, j'avais lu en très grande diagonale, sachant que la réponse au pbolème était déjà donnée.. Mais c'est vrai que
    pg_addr = (caddr_t) mmap(0, size, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_SHARED,fd, 0);
    if (pg_addr == (caddr_t) -1)
    {
    perror("mmap failure");
    exit(0);
    }
    est très moche. Caster -1 en pointeur, c'est assez ignoble (au passage, c'est non portable). mmap() renvoie MAP_FAILED en cas d'erreur (suivant POSIX; après si l'implémentation n'est pas conforme, c'est autre chose...).
    De plus, exit(0) pour signaler une erreur ! EXIT_FAILURE sert à ça.
    Qui plus est, faire un exit() alors qu'on a soi-même défini une fonction Quitter, c'est illogique.

    En relisant un peu mieux, on a aussi:
    - fflush(stdin);, cf. http://c-faq.com/stdio/stdinflush2.html .
    - scanf(), cf. http://mapage.noos.fr/emdel/notes.htm#saisie
    - int size = sizeof(FICHE);, alors que sizeof renvoie un size_t, et que c'est justement ce que mmap() est censé recevoir...