studio - teoria sistemica pdf
¿Cómo establecer el valor de errno? (3)
IMO, el errno
estándar diseñado para nivel de sistema. Mi experiencia es no contaminarlos. Si desea simular el mecanismo de errno
estándar de C, puede hacer una definición como:
/* your_errno.c */
__thread int g_your_error_code;
/* your_errno.h */
extern __thread int g_your_error_code
#define set_your_errno(err) (g_your_error_code = (err))
#define your_errno (g_your_error_code)
y también puedes implementar your_perror(err_code)
. Más información, por favor refiérase a la implementación de glibc .
Tengo dos llamadas a dos métodos diferentes:
void func1()
{
// do something
if (fail)
{
// then set errno to EEXIST
}
}
Y el segundo método:
void func2()
{
// do something
if (fail)
{
// then set errno to ENOENT
}
}
Cuando configuro el
errno
a algún valor, ¿qué hace? solo comprobación de errores?¿Cómo puedo configurar
errno
en los métodos anterioresfunc1
yfunc2
paraEEXIST
yENOENT
Gracias
Para todos los propósitos prácticos, puede tratar errno
como una variable global (aunque generalmente no lo es). Así que incluye errno.h
y solo errno.h
:
errno = ENOENT;
Debe preguntarse si errno
es el mejor mecanismo de informe de errores para sus propósitos. ¿Se pueden diseñar las funciones para que devuelvan el código de error?
#include <errno.h>
void func1()
{
// do something
if (fail)
{
errno = ENOENT;
}
}