C生成唯一ID

问题描述 投票:0回答:1

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

问题是我需要能够生成一个唯一的ID进行映射。我不想使用任何外部库。有没有什么方法可以在没有任何大笔开销的情况下进行此操作?

c map unique wrapper
1个回答
2
投票

我想您实际上希望id在全世界范围内都是唯一的(因此,在两台不同计算机上的两台不同计算机上运行程序的两个进程将始终具有不同的id)。

否则,只需在包装器中使用static long counter;,然后使用id = counter++;

您可以为此目的使用UUID

或者您可以生成随机- 24字节字符串(或两个或三个随机uint64_t数字)。如果您的数字是“足够的”随机数(至少在启动时使用随机种子(例如,使用随机源àla PRNG(或random(4))或当前时间和进程ID)播出好的getrandom(2) &主机ID;请确保使用状态足够大的PRNG)collisions的可能性应该可以忽略不计(但我不能够或不愿量化它)。

FWIW,在我的MELT监视器中,我在文件mom_make_random_idstr的例程random.c中(在Linux上)执行类似的操作;随机字符串包含一组严格限制的字符(与C标识符兼容)。还要查看Bismonid_BM.c文件和randomid_BMidtocbuf32_BM的内部,或RefPerSys的内部。

您还可以从MongoDb objids中获得一些启发。

另请参见this related question

© www.soinside.com 2019 - 2024. All rights reserved.