我正在寻找一个用于C语言编程的UUID库,它在大多数现代Linux桌面上具有合理的安装概率(或者至少可由包管理器安装),并且可以与pkg-config
一起使用。
以下两种可能性似乎最为明显:
是否有人对这两者有经验并且可以推荐一个或另一个,或第三个可能性?
答案 0 :(得分:18)
我使用过两者,我绝对更喜欢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。