日期:2014-05-16  浏览次数:20863 次

奇怪,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中