¿Hay alguna forma de utilizar errno de forma segura en una aplicación multihilo?
Si está escribiendo una aplicación multihilo que usa llamadas al sistema/biblioteca que hacen uso de errno para indicar el tipo de error, ¿hay una forma segura de usar errno? Si no, ¿ hay alguna otra manera de indicar el tipo de error que ocurrió en lugar de solo que se ha producido un error?
2 answers
Si su biblioteca estándar es compatible con varios hilos, entonces probablemente tiene un #define
que cambia errno
en una llamada a función que devuelve un valor de retorno de error local de hilo. Sin embargo, para usar esto generalmente debe incluir <errno.h>
, en lugar de confiar en una declaración extern
.
Encontré un artículo Thread-safety y POSIX.1 que aborda esta misma cuestión.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-16 07:49:26
man errno
dice:
Errno está definido por el estándar ISO C ser un lvalue modificable de tipo int, y no debe ser explícitamente declarado; errno puede ser una macro. errno es thread-local; configurándolo en uno el hilo no afecta su valor en cualquier otro hilo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-16 08:54:40