C生成唯一ID

我正在创建一个C包装器,可以读取存储在文本文件中的数据结构类型。 接口应该是我可以生成映射到唯一数据结构的唯一ID,并通过唯一ID修改包装函数。

问题是我需要能够生成一个唯一的id来映射。 我想不使用任何外部库。 没有任何大的开销有没有办法做到这一点?

我想你想要id(实际上说)在世界范围内是唯一的(因此在两台不同机器上的两台不同计算机上运行程序的两个进程总是会有不同的id)。

否则,只需使用static long counter; 那么id = counter++; 在你的包装中。

您可以将UUID用于此目的。

或者您可以生成随机-eg 24字节字符串(或两个或三个随机uint64_t数字)。 如果您的数字是“足够”随机的(至少如果您在启动时使用随机种子播种一个好的PRNG ,例如使用随机源( 随机)(4)或当前时间和进程ID和主机ID;请务必使用具有足够大状态的PRNG) 碰撞的概率应该可以忽略不计(但我无法或不愿意量化它)。

FWIW,在我的MELT监视器中,我在我的文件random.c的例程mom_make_random_idstr中做了类似的事情(在Linux上); 随机字符串包含一组很好的限制字符(与C标识符兼容)。

您还可以从MongoDb objids中获取灵感。

另请参阅此相关问题 。