奇怪,Linux下的uuid_generate的问题。。

program2050 2012-04-24 12:09:59
连续两次uuid_generate得到的结果一样?uuid_generate不是为了产生不一样的key的吗?
怎么样才能每次得到的keys唯一?


#include <stdio.h>
#include <uuid/uuid.h>

int save2cache(char* keys)
{
/*生成uuid*/
uuid_t uu;
uuid_generate(uu);
memset(keys, 0x00, sizeof(keys));
sprintf(keys, "%x", uu);
return 0;
}


int save2cache2(char* keys)
{
/*生成uuid*/
uuid_t uu;
uuid_generate_random(uu);
memset(keys, 0x00, sizeof(keys));
sprintf(keys, "%x", uu);
return 0;
}

int save2cache3(char* keys)
{
/*生成uuid*/
uuid_t uu;
uuid_generate_time(uu);
memset(keys, 0x00, sizeof(keys));
sprintf(keys, "%x", uu);
return 0;
}

int main(int argc, char** argv)
{
char keys[50], keys2[50], keys3[50];
save2cache(keys);
printf("keys=%s\n", keys);

save2cache(keys);
printf("keys=%s\n", keys);

printf("/////////////////\n");
save2cache(keys2);
printf("keys2=%s\n", keys2);

save2cache(keys3);
printf("keys3=%s\n", keys3);
return 0;
}





gcc -o so so.c -luuid
./so

keys=bff40930
keys=bff40930
/////////////////
keys2=bff40930
keys3=bff40930



在执行一次,结果可以不一样:
./so

keys=bff18780
keys=bff18780
/////////////////
keys2=bff18780
keys3=bff18780

是不是每次uuid_generate后,要释放些什么东西才行?uuid_clear后也不行啊。。。

求高人指教。
...全文
2441 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjfeii 2014-06-10
  • 打赏
  • 举报
回复
用“%x”取uuid不正确,可以这样搞:
    
    char str[37] = {0};
    uuid_t uuid;

    uuid_generate_time(uuid); 
    uuid_unparse(uuid, str);
yuanjie_xia 2014-03-25
  • 打赏
  • 举报
回复
int save2cache(char* keys) { /*生成uuid*/ uuid_t uu; uuid_generate(uu); memset(keys, 0x00, sizeof(keys)); sprintf(keys, "%x", uu); // 输出的uu变量的地址止,当然会一样了 return 0; }
帅帅小码农 2012-12-11
  • 打赏
  • 举报
回复
您好,我也遇到了这个问题。在同一个进程中运行uuid_generate生成的都一样。 你的问题解决了吗
snake890603 2012-10-24
  • 打赏
  • 举报
回复
以%c进行打印
snake890603 2012-10-24
  • 打赏
  • 举报
回复
uuid_t是一个16个字符数组,uuid_generate等函数产生32位16进制数存入uuid_t里,你%x只是打印了其中的8位。
可以uuid[i]访问其中的两位。
qq120848369 2012-05-04
  • 打赏
  • 举报
回复
没用过,也man不出来。。。

你可以灵活点的,直接read /dev/random拿几个字节用,或者gettimeofday之类的得到当前时间,拼成字符串,反正只要足够唯一就可以,调个md5或者crypt生成key就行了,都是一样的。
program2050 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

man uuid_generate
[/Quote]

man过了,道行浅,没悟出来。。。

大侠赐教。
赵4老师 2012-04-24
  • 打赏
  • 举报
回复
man uuid_generate
本课程是《Flowable流程入门课程》的后续高级课程。在学习本课程前,应先学习入门课程,以掌握相关基础知识。高级课程着重讲解Flowable工作流的高级概念、复杂理论和实战应用。课程内容包括流程管理思想、技术与标准、工作流的控制模式和资源模式;Flowable数据库表及变量;与Spring、Spring Boot的集成;BPMN 2.0主要类图;Flowable高级服务如JAVA服务任务、脚本任务、Web Service任务、外部工作者任务、多实例任务、补偿处理程序、子流程和调用活动等;Flowable事件侦听器、执行侦听器和任务侦听器;Flowable历史和REST API;Flowable事务、并发性、身份管理及LDAP集成;Flowable高级主题如流程实例迁移、异步执行器的设计与配置、用于高并发的UUID ID生成器、多租户、高级流程引擎配置、执行自定义SQL和实验性流程调试器等;Flowable Eclipse设计器特性及定制;Flowable 事件注册;Flowable相关标准和规范如ISO8601标准和cron等。本课程对Flowable官方文档进行了彻底梳理和融汇贯通,并结合实践,形象生动、系统全面、简单易懂地呈现给大家,让大家从开源软件文档冗长耗时、英文晦涩难懂、概念理解困难、知识点分散等困境中解脱出来,从而能快速地将Flowable具有的高级特性应用到项目的高级需求和复杂实践中去。课程特色:案例和代码驱动、基础概念与经典实战相结合、知识环节融会贯通、关联知识平滑拓展、概念和原理展示形象生动。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧