2010-04-02 14 views
13

Sto cercando una libreria UUID per la programmazione in C, che ha una ragionevole probabilità di essere installata (o almeno installabile dal gestore pacchetti) sulla maggior parte dei desktop Linux moderni e funziona con pkg-config.Libreria UUID per C?

le seguenti due possibilità sembrano più ovvia:

Qualcuno ha esperienza con questi due e può raccomandare uno sopra l'altro, o di un terzo possiblity ?

risposta

18

Ho usato entrambi e preferisco decisamente l'util-linux-ng (precedentemente in e2fsprogs). Per la portabilità, faccio il mio supporto software entrambi e uso macro di autoconf/cmake per rilevare quale è installato.

Il problema principale con OSSP per me è che abusa dell'orientamento agli oggetti in C per nessuna buona ragione. Un UUID è solo un numero di 128 bit, che può essere rappresentato con un array char [16]. L'UUID è solitamente associato ad un'altra struttura (l'UUID funge da chiave o da identificatore per tale struttura), quindi dovrebbe essere buono se si potesse allineare quella matrice alla struttura stessa.

Con UUID OSSP, fornisce un puntatore uuid_t* a un oggetto allocato dinamicamente, che contiene più stato del solo valore UUID. Se lavori con decine di migliaia di oggetti, questo rallenta sensibilmente il programma, utilizza più memoria e provoca una maggiore frammentazione della memoria. Alla fine, per rendere OSSP UUID utilizzabile, devi usarlo solo per generare l'UUID (che coinvolge 4 chiamate: uuid_create, uuid_make, uuid_export e uuid_destroy) e lavorare da solo con il valore UUID. Con util-linux-ng, è solo una singola chiamata: uuid_generate.

+0

+1, buona risposta. –

+0

Juliano, ti dispiacerebbe condividere le specifiche direttive di configurazione di Autoconf che stai utilizzando per questa configurazione? Lo sto cercando da zero al momento, ma essendo un novizio di Autotools mi sentirei meglio affidamento su qualcosa che è già stato utilizzato con successo in natura. Qualsiasi suggerimento apprezzato ... –

+3

@Arto: http://pastebin.com/t04f5KmP – Juliano