Linux errno use basic tutorial

  

Cuando la función C api en Linux es anormal, a la variable errno (incluyendo include errno.h) generalmente se le asigna un valor entero, diferentes valores indican diferentes significados, puede ver esto El motivo de la especulación del valor es que en la programación real, este truco ha resuelto muchos problemas que parecen ser inexplicables. Pero errno es un número, el significado específico de errno.h para leer la definición de macro, y cada búsqueda es una cosa muy tediosa. Hay varias formas de obtener fácilmente el mensaje de error.
(1) void perror (const char * s) descripción de la función perror () se usa para enviar el error de la función anterior al error estándar (stderr), el parámetro s se refiere a La cadena se imprimirá primero, seguida de la cadena de motivo de error. La causa de este error es la cadena que se debe enviar de acuerdo con el valor de la variable global errno.
(2) char * strerror (int errno) convierte el código de error en un mensaje de error de cadena, que se puede combinar con otra salida de información a la interfaz de usuario como fprintf (stderr, " error en CreateProcess% s, Process ID% d ", strerror (errno), processID) Nota: Suponga que processID es un ID entero (3) printf ("% m ", errno) que se ha adquirido; además, no todos los lugares pueden pasar un error cuando se produce un error. Obtenga el código de error, como el siguiente fragmento de código /* Nota: El siguiente archivo de encabezado usa " " en lugar de usar corchetes angulares directamente porque los corchetes angulares en el bus del blog se tratan como símbolos html, por lo que el nombre del archivo del encabezado interno será directamente Ignorar * /# incluye "stdio.h" #include "stdlib.h" #include "errno.h" #include "netdb.h" #include "sys /types.h " netinet /In.h " int main (int argc, char * argv []) {struct hostent * h; if (argc! = 2) {fprintf (stderr, " uso: dirección getip \\ n "); exit (1); } /* Obtener información del host * /if ((h = gethostbyname (argv [1])) == NULL) {/* Si falla gethostbyname, aparece el mensaje de error * /herror (" gethostbyname "); exit (1);} /* La información obtenida por el programa de impresión * /printf (" Nombre de host:% s \\ n ", h- > h_name); printf (" Dirección IP:% s \\ n ", inet_ntoa (* ((struct in_addr *) h- > h_addr))); return 0;}

/**** ********************************* /Puede ver a través del código anterior: utilizando la función gethostbyname (), no puede Utilice perror () para generar mensajes de error (porque el código de error se almacena en h_errno en lugar de errno). Por lo tanto, necesita llamar a la función herror (). Simplemente pase a gethostbyname () un nombre de máquina (" bbs.tsinghua.edu.cn ") y luego obtenga la IP y otra información de la estructura de estructura devuelta hostent. El programa que genera la dirección IP en el programa debe explicar: h-> h_addr es un char *, pero la función inet_ntoa () debe pasar una estructura struct in_addr. Así que el anterior h-> h_addr se convierte a struct in_addr *, y luego todos los datos se obtienen a través de él.


Los valores del código de error definidos en errno.h son los siguientes:

Verificar el código de error errno es un método importante para depurar un programa. Cuando ocurre una excepción en la función linuc C api, a la variable errno (incluye errno.h) generalmente se le asigna un valor entero. Diferentes valores indican diferentes significados. Puede estimar la causa del error al observar el valor. En la programación real, este truco ha resuelto muchos problemas que parecen ser inexplicables. Más problema es que cada vez que tiene que ir al código fuente de Linux para encontrar el significado del código de error, y ahora pegarlo, debe revisarlo más tarde. Lo siguiente es del código del kernel de Linux 2.4.20-18 /usr/include/asm/errno.h#ifndef _I386_ERRNO_H # define _I386_ERRNO_H # define EPERM 1 /* Operación no permitida * /# define ENOENT 2 /* No existe este archivo o Directorio * /# define ESRCH 3 /* No existe tal proceso * /# define EINTR 4 /* Llamada del sistema interrumpida * /# define EIO 5 /* Error de E /S * /# define ENXIO 6 /* No existe tal dispositivo o dirección * /#define E2BIG 7 /* La lista de argumentos es demasiado larga * /# define ENOEXEC 8 /* Error de formato de ejecución * /# define EBADF 9 /* Número de archivo incorrecto * /# define ECHILD 10 /* No hay procesos secundarios * /# define EAGAIN 11 /* Inténtalo de nuevo * /# define ENOMEM 12 /* No hay memoria * /# define EACCES 13 /* Permiso denegado * /# define EFAULT 14 /* Dirección incorrecta * /# define ENOTBLK 15 /* Se requiere dispositivo de bloqueo * /# define EBUSY 16 /* Dispositivo o recurso ocupado * /# define EEXIST 17 /* El archivo existe * /# define EXDEV 18 /* Enlace entre dispositivos * /# define ENODEV 19 /* No existe dicho dispositivo * /# define ENOTDIR 20 /* No es un Directorio * /# define EISDIR 21 /* Es un directorio * /# define EINVAL 22 /* Argumento no válido * /# define ENFILE 23 /* Desbordamiento de la tabla de archivos * /# define EMFILE 24 /* Demasiados archivos abiertos * /# define ENOTTY 25 /* No es una máquina de escribir * /# define ETXTBSY

Copyright © Conocimiento de Windows All Rights Reserved