Domanda
sto cercando di creare un wrapper libdnet per la programmazione D linguaggio. Il problema che ho incontrato non è sapere ciò che il sottolineando tipi per eth_addr_t, ip_addr_t e ip6_addr_t mentre la conversione di addr.h . L'ultimo tipo mistero è sockaddr
E sono anche interesse per il motivo per cui v'è un ciclo Do While che è sempre false.
#define addr_pack(addr, type, bits, data, len) do { \
(addr)->addr_type = type; \
(addr)->addr_bits = bits; \
memmove((addr)->addr_data8, (char *)data, len); \
} while (0)
è richiesto per C per eseguire il codice nella macro?
Soluzione
Questa è una macro definire per il c preprocessore. Tali barre rovesciate alla fine è perché è proprio tutt'uno definizione che si estende su più righe. Un do while è come un ciclo while, ad eccezione della valutazione viene fatto al termine permettergli di svolgere sempre almeno una volta. In questo caso lo sviluppatore ha utilizzato tale ciclo while come una sorta di hack per permettere il suo codice per essere messo in un proprio ambito di applicazione.
Da eth.h nella stessa directory:
typedef struct eth_addr {
uint8_t data[ETH_ADDR_LEN];
} eth_addr_t;
ip.h:
typedef uint32_t ip_addr_t;
ip6.h:
typedef struct ip6_addr {
uint8_t data[IP6_ADDR_LEN];
} ip6_addr_t;
honeyd-1.1.1 / inutilizzato / WINSOCK.H:
/*
* Structure used by kernel to store most
* addresses.
*/
struct sockaddr {
u_short sa_family; /* address family */
char sa_data[14]; /* up to 14 bytes of direct address */
};
Altri suggerimenti
Avete dato un'occhiata a htod ? Si suppone per convertire automaticamente i file .h per d dichiarazioni.