读书人

奇怪Linux上的uuid_generate的有关问

发布时间: 2012-07-16 15:44:59 作者: rapoo

奇怪,Linux下的uuid_generate的问题。。
连续两次uuid_generate得到的结果一样?uuid_generate不是为了产生不一样的key的吗?
怎么样才能每次得到的keys唯一?

C/C++ code
#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

[解决办法]
“memset(keys, 0x00, sizeof(keys))”这种写法是错的,sizeof(keys)得不到字串的长度

“sprintf(keys, "%x", uu)”写法也是错的,这是关键,这样只能将uu前4个字节(一个int类型)打印到keys中

读书人网 >UNIXLINUX

热点推荐