Come definisco i miei valori errno?
Domanda
Quando sviluppiamo un modulo (driver di dispositivo, middleware, ecc ...) che verrà eseguito nello spazio del kernel, vorremmo avere un modo per catturare il motivo per cui un'operazione potrebbe fallire.
In VxWorks, il meccanismo errno sembra essere un buon modo per farlo.
È possibile definire i miei valori errno?
Soluzione
Nel contesto di VxWorks errno è definito come due 16-bit:
- Il 16 bit superiore identifica il " modulo " dove si è verificato l'errore.
- I 16 bit inferiori rappresentano l'errore particolare per quel modulo.
I valori ufficiali del modulo vxWorks (per errno) si trovano nel file ../h/vwModNum.h. Attualmente stanno usando alcune centinaia di numeri. Tutti questi numeri di modulo hanno il modulo
#define M_something (nn << 16)
È fortemente sconsigliato modificare questo (o qualsiasi) file di intestazione vxWorks.
Quello che potresti fare è creare il tuo file di intestazione del modulo e iniziare con un numero abbastanza grande da non causare conflitti.
/* myModNum.h */ #define M_MyModule (10000 << 16) #define M_MyNextModule (10001 << 16) ...
Nei file di intestazione del singolo modulo, creare i singoli valori errno.
/* myModule.h */ #define S_MyModule_OutOfResources (M_MyModule | 1) #define S_MyModule_InvalidHandle (M_MyModule | 2) ...
Nel tuo codice, puoi quindi impostare errno sulla tua macro definita.
Altri suggerimenti
Errno è solo un numero e funzioni come strerror () restituiscono un testo descrittivo. Se si desidera estenderlo, è sufficiente fornire una propria funzione simile a strerror () che esamina l'elenco degli errori o delega a strerror ().