2008-09-24 7 views
0

При разработке модуля (драйвера устройства, промежуточного программного обеспечения и т. Д.), Который будет запускаться в пространстве ядра, мы хотели бы иметь способ распознать причину, по которой операция может завершиться неудачей.Как определить свои собственные значения errno?

В VxWorks механизм errno, по-видимому, является хорошим способом сделать это.

Можно ли определить свои собственные значения errno?

ответ

2

В контексте VxWorks егто определяются как два 16-битные:

  • Верхнее 16-бит идентифицирует «модуль», где случилась ошибка.
  • Нижняя 16-бит представляет собой конкретную ошибку для этого модуля.

Официальные значения модуля vxWorks (для errno) находятся в файле ../h/vwModNum.h. В настоящее время они используют несколько сотен номеров. Эти номера модулей все имеют вид

 
#define M_something (nn << 16) 

Это сильно обескуражен, чтобы изменить это (или любой) заголовочный файл VxWorks.

Что вы можете сделать, это создать свой собственный заголовочный файл модуля и начать с достаточно большого числа, чтобы не вызывать конфликтов.

 
/* myModNum.h */ 
#define M_MyModule  (10000 << 16) 
#define M_MyNextModule (10001 << 16) 
... 

В отдельных файлах заголовка модуля создайте индивидуальные значения errno.

 
/* myModule.h */ 
#define S_MyModule_OutOfResources (M_MyModule | 1) 
#define S_MyModule_InvalidHandle (M_MyModule | 2) 
... 

В вашем коде вы можете установить errno в свой определенный макрос.

1

Errno - это просто число и функции, такие как strerror(), возвращают описывающий текст. Если вы хотите расширить его, просто создайте собственную функцию, похожую на strerror(), которая просматривает ваш список ошибок или делегирует strerror().