UUID библиотека для C? - PullRequest
       11

UUID библиотека для C?

13 голосов
/ 02 апреля 2010

Я ищу библиотеку UUID для программирования на C, которая имеет разумную вероятность быть установленной (или, по крайней мере, устанавливаемой менеджером пакетов) на большинство современных рабочих столов Linux и работает с pkg-config.

Следующие две возможности кажутся наиболее очевидными:

Кто-нибудь имеет опыт работы с этими двумя и может порекомендовать один над другим, или третий вариант?

1 Ответ

18 голосов
/ 02 апреля 2010

Я использовал оба, и я определенно предпочитаю util-linux-ng (ранее в e2fsprogs). Для обеспечения переносимости я поддерживаю обе программы и использую макросы autoconf / cmake, чтобы определить, какая из них установлена.

Основная проблема с OSSP для меня заключается в том, что он злоупотребляет объектной ориентацией в C без уважительной причины. UUID - это просто 128-битное число, которое может быть представлено массивом char [16]. UUID обычно ассоциируется с другой структурой (UUID служит ключом или идентификатором для такой структуры), поэтому было бы хорошо, если бы вы могли встроить этот массив в саму структуру.

С OSSP UUID он дает указатель uuid_t* на динамически размещенный объект, который содержит больше состояния, чем просто значение UUID. Если вы работаете с десятками тысяч объектов, это заметно замедляет работу программы, использует больше памяти и приводит к большей фрагментации памяти. В конце, чтобы сделать USS USS USSID пригодным для использования, вы должны использовать его только для генерации UUID (который включает 4 вызова: uuid_create, uuid_make, uuid_export и uuid_destroy) и работать со значением UUID самостоятельно. С util-linux-ng это всего лишь один вызов: uuid_generate.

...