• # perror()

    Posté par (site web personnel) . En réponse au journal Question qui me travaille .... Évalué à 9.

    > joli message d'erreur "Success"

    C'est dû au fait que le développeur a appelé une fonction qui touche à errno après celle qui avait positionné l'erreur; du coup errno est remis à 0 (success) et l'appel à perror() retourne Success.

    exemple:

    /* peut retourner ENOENT si le fichier n'existe pas, ou d'autres erreurs*/
    FILE *fp = fopen("blah.txt","r");
    if (fp == NULL) { unlink("blah.txt"); perror("fopen"); }

    comme unlink aura réussi, on aura "Success".

    FILE *fp = fopen("blah.txt","r");
    if (fp == NULL) { perror("fopen"); unlink("blah.txt"); }

    Fonctionne mieux. Souvent la logique de la fonction est plus compliquée et du coup on peut en laisser passer.