fprintf c stderr

c - fprintf - stderr python



¿Cuándo debería usar perror("...") y fprintf(stderr, "...")? (5)

Ellos hacen cosas bastante diferentes.

Utiliza perror() para imprimir un mensaje a stderr que corresponde a errno . Utiliza fprintf() para imprimir cualquier cosa en stderr o cualquier otra secuencia. perror() es una función de impresión muy especializada:

perror(str);

es equivalente a

if (str) fprintf(stderr, "%s: %s/n", str, strerror(errno)); else fprintf(stderr, "%s/n", strerror(errno));

Leer las páginas man y algunos códigos realmente no me ayudaron a entender la diferencia entre - o mejor, cuando debería usar - perror("...") o fprintf(stderr, "...") .


La función Perror toma más tiempo para realizar la ejecución La llamada va del espacio de usuario al espacio kernel cuando fprintf llama a goest para api a kernal


Llamar a perror le dará el valor interpretado de errno , que es un valor de error local de subprocesos escrito por las llamadas de sistema POSIX (es decir, cada subproceso tiene su propio valor para errno ). Por ejemplo, si realizó una llamada a open() , y se generó un error (es decir, devolvió -1 ), podría llamar inmediatamente a perror para ver cuál era el error real. Tenga en cuenta que si llama a otras llamadas de sistema mientras tanto, se escribirá el valor en errno , y llamar a perror no servirá para diagnosticar su problema si se generó un error en una llamada de sistema anterior.

fprintf(stderr, ...) por otro lado se puede utilizar para imprimir sus propios mensajes de error personalizados. Al imprimir en stderr , evitará que su salida de informe de errores se mezcle con la salida "normal" que debería ir a stdout .

Tenga en cuenta que fprintf(stderr, "%s/n", strerror(errno)) es similar a perror(NULL) ya que una llamada a strerror(errno) generará el valor de la cadena impresa para errno , y luego puede combinar eso con cualquier otro mensaje de error personalizado a través de fprintf .


perror () siempre escribe en stderr; strerr (), usado junto con fprintf (), puede escribir en cualquier salida, incluida stderr pero no exclusivamente.

fprintf(stdout, "Error: %s", strerror(errno)); fprintf(stderr, "Error: %s", strerror(errno)); // which is equivalent to perror("Error")

Además, perror impone su propio texto formateando "texto: descripción del error"


perror(const char *s) : imprime la cadena que le da seguido de una cadena que describe el valor actual de errno .

stderr : es un flujo de salida utilizado para canalizar sus propios mensajes de error (por defecto es el terminal).

Pertinente:

char *strerror(int errnum) : dale un número de error, y devolverá la cadena de error asociada.