Как определить мои собственные значения errno? - PullRequest
0 голосов
/ 24 сентября 2008

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

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

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

Ответы [ 2 ]

2 голосов
/ 24 сентября 2008

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

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

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

#define M_something   (nn &lt&lt  16)

Настоятельно не рекомендуется 1013 * изменять этот (или любой) заголовочный файл vxWorks.

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

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

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

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

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

1 голос
/ 24 сентября 2008

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

...