C生成唯一的ID
问题描述:
我正在创建一个C包装器,它可以读取存储在文本文件中的数据结构的类型。该接口应该是我可以生成映射到唯一数据结构的唯一ID并通过唯一ID通过包装函数进行修改。C生成唯一的ID
问题是我需要能够生成一个唯一的ID来映射。我不想使用任何外部库。有没有办法做到这一点,没有任何大的开销?
答
我想你想让id在世界范围内独一无二(所以在两台不同机器上的两台不同计算机上运行你的程序的两个进程总会有不同的ID)。
否则,只需在包装中使用static long counter;
然后id = counter++;
。
您可能会为此使用UUID。
或者你可以生成一个随机-e.g. 24个字节 - 字符串(或两个或三个随机数uint64_t
)。如果你的数字是“足够”随机的(至少如果你在启动时使用随机种子种子很好,例如使用随机数据源,或者使用当前时间&进程ID &主机ID;一定要使用PRNG一个足够大的状态)collisions的概率应该可以忽略不计(但我不能或不愿量化它)。在我的MELT监视器中,我在我的文件random.c的例程mom_make_random_idstr
中做类似的事情(在Linux上);在我的文件random.c的例程mom_make_random_idstr
中,该随机字符串包含一组非常有限的字符(与C标识符兼容)。
您也可以从MongoDb objids中获得一些灵感。请参阅this related question。
1,2,3,4,...怎么样? – 2014-12-02 12:59:49
为什么你不想使用外部库?你在哪个操作系统上编码? “id”应该有多独特(全球唯一,全系统唯一或全过程独特)?请**编辑您的问题**以改善它! – 2014-12-02 12:59:54
Windows。我选择不使用外部库,因为它使库变得更加庞大。我想保持小巧,简单和兼容的东西。 – user82779 2014-12-02 13:01:57