2009-07-23 9 views
0

Je ne fais que tester un petit programme que je veux tester.Affichage des messages d'erreur standard

Je me demande s'il existe un moyen d'utiliser la commande stderr pour afficher l'erreur réelle.

Par exemple, si le fichier n'existe pas. Y a-t-il une erreur standard que je peux afficher? J'utilise stderr, et j'ai pensé en utilisant cela, que je pourrais afficher ce que l'erreur réelle était.

Par exemple. Si le fichier ne quitte pas. Des erreurs sont-elles envoyées à stderr qui peut être affiché?

J'espère que je suis clair avec ma question.

Merci beaucoup pour tout conseil.

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char buffer[100] = {'\0'}; /* declare and clean buffer */ 

    FILE *fp; 
    int len_of_buff = 0; 

    fp = fopen("licenseURL.txt", "r"); 

    if(fp == NULL) 
    { 
     fprintf(stderr, "There was a error opening a file ???"); 

     exit(1); 
    } 

    fgets(buffer, sizeof(buffer), fp); 
    len_of_buff = strlen(buffer); 
    buffer[len_of_buff + 1] = '\0'; /* null terminate */ 
    printf("The url is: [ %s ]\n", buffer); 

    fclose(fp); 
} 

Répondre

5

Remplacez votre fprintf (stderr, ...) appeler avec:

perror("file open"); 

(stderr est juste un flux pour envoyer des messages d'erreur, de sorte qu'ils ne avec la sortie normale du programme se mélangent pas - au cas où vous rediriger vers un fichier ou similaire).

3

Utilisez la fonction strerror() pour récupérer une chaîne décrivant l'erreur.

1

Ma version non testé ressemblerait à ceci:


#include <errno.h> 
#include <stdarg.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

static void 
die(const char *errstr, ...) { 
     va_list ap; 

     va_start(ap, errstr); 
     vfprintf(stderr, errstr, ap); 
     va_end(ap); 
     exit(EXIT_FAILURE); 
} 

int 
main(int argc, char **argv) { 
     static const char licenseURL[] = "licenseURL.txt"; 
     static char buf[100]; /* declare a clean buffer */ 
     FILE *fp; 
     size_t len = 0; 

     if(!(fp = fopen(licenseURL, "r"))) 
       die("couldn't %s: %s\n", licenseURL, strerror(errno)); 
     if(!fgets(buf, sizeof buf, fp)) 
       die("fgets failed: %s\n", strerror(errno)); 
     len = strlen(buf); 
     if(len > 1 && buf[len - 1] == '\n') 
       buf[len - 1] = '\0'; /* cut off trailing \n */ 
     printf("The url is: [ %s ]\n", buf); 
     fclose(fp); 

     return 0; 
} 
Questions connexes