Como faço para definir meus próprios valores de errno?
Pergunta
Ao desenvolver um módulo (driver de dispositivo, middleware, etc ...) que será executado no espaço do kernel, gostaríamos de ter uma maneira de capturar o motivo pelo qual uma operação pode falhar.
No VXWorks, o mecanismo ERRNO parece ser uma boa maneira de fazer isso.
É possível definir meus próprios valores de erro?
Solução
No contexto do VXWorks Errno, é definido como dois de 16 bits:
- Os 16 bits superiores identificam o "módulo" onde ocorreu o erro.
- Os 16 bits inferiores representam o erro específico para esse módulo.
Os valores oficiais do módulo VXWorks (para errno) estão localizados no arquivo ../h/vwmodnum.h. Atualmente, eles estão usando algumas centenas de números. Todos esses números de módulos têm o formulário
#define M_something (nn << 16)
Isso é fortemente Desanimado para modificar esse (ou qualquer) arquivo de cabeçalho do VXWorks.
O que você poderia fazer é criar seu próprio arquivo de cabeçalho do módulo e iniciar um número grande o suficiente para não causar conflitos.
/* myModNum.h */ #define M_MyModule (10000 << 16) #define M_MyNextModule (10001 << 16) ...
Os arquivos de cabeçalho do módulo individual, crie os valores individuais de errno.
/* myModule.h */ #define S_MyModule_OutOfResources (M_MyModule | 1) #define S_MyModule_InvalidHandle (M_MyModule | 2) ...
No seu código, você pode definir Errno para sua macro definida.
Outras dicas
ERRNO é apenas um número e funções como o STRERROR () retornam um texto descrevendo. Se você deseja estendê -lo, apenas forneça uma função própria semelhante ao strerror () que examina sua lista de erros ou delegados ao strerror ().