Библиотека UUID для C?
Я ищу библиотеку UUID для программирования на C, которая имеет разумную вероятность установки (или, по крайней мере, установки менеджером пакетов) на большинстве современных настольных компьютеров Linux и работает с pkg-config
.
следующие две возможности кажутся наиболее очевидными:
- OSSP UUID
- Libuuid от командой e2fsprogs
кто-нибудь имеет опыт работы с этими двумя и может рекомендовать один над другая или третья возможность?
1 ответов
я использовал оба, и я определенно предпочитаю util-linux-ng (ранее в e2fsprogs). Для переносимости я поддерживаю программное обеспечение и использую макросы autoconf/cmake для определения того, какой из них установлен.
основная проблема с OSSP для меня заключается в том, что он злоупотребляет объектной ориентацией в C без уважительной причины. UUID - это всего лишь 128-битное число, которое может быть представлено массивом char[16]. UUID обычно связан с другой структурой (UUID служит ключом или идентификатором для такой структуры), поэтому было бы хорошо, если бы вы могли встроить этот массив в саму структуру.
С OSSP UUID, это дает вам uuid_t*
указатель на динамически выделенный объект, который содержит больше состояния, чем просто значение UUID. Если вы работаете с десятками тысяч объектов, это делает программу медленнее, использует больше памяти и вызывает большую фрагментацию памяти. В конце концов, чтобы использовать OSSP UUID, вы должны использовать его только для генерации UUID (который включает 4 вызова: uuid_create, uuid_make, uuid_export и uuid_destroy) и работать со значением UUID самостоятельно. С util-linux-ng это всего лишь один вызов: uuid_generate.