读取 /proc/sys/kernel/random/uuid 可以得到一个guid

读取 /proc/sys/kernel/random/uuid 可以得到一个guid

string CommFun::GenGuid(int extend)
{
	char uuid[39];
	int fd = open("/proc/sys/kernel/random/uuid", O_RDONLY);
	if(fd>=0)
	{
		read(fd, uuid+1, 36);
	}
	uuid[37] = 0;

	if(extend==0)
	{
                close(fd);
		return uuid+1;
	}
	uuid[0] = '{';
	uuid[37] = '}';
	uuid[38] = 0;

	return uuid;
}

void GenGuid(void)
{
	char dbcode[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
	long long int uuid[2];
	static long long int seed=0;

	int rfd;
	if ((rfd = open("/dev/urandom", O_RDWR)) < 0 )
	{
		*(int32_t*)(uuid) = random();
		*(int32_t*)(uuid+1) = random();
		*(int32_t*)(uuid+2) = random();
		*(int32_t*)(uuid+3) = random();
	}
	else
	{
		if(!seed)
		{
			seed=time(0)+getpid();
			write(rfd, &seed, sizeof(seed));
		}

		if(read(rfd, uuid, 16)!=16)
		{
			*(int32_t*)(uuid) = random();
			*(int32_t*)(uuid+1) = random();
			*(int32_t*)(uuid+2) = random();
			*(int32_t*)(uuid+3) = random();
		}

		close(rfd);
	}
	
	static char uuidstring[40] = "1E176852-AB1F-FFFF-FFFF-15CAF932FE70";

	int indx=0;
	for(int i = 0; i < 2; ++i)
	{
		for(int j=0; j<16; ++indx)
		{
			if(indx==8 || indx==13 || indx==18 || indx==23)
			{
				uuidstring[indx] = '-';
				continue;
			}

			uuidstring[indx] = dbcode[uuid[i] & 0xf];

			++j;
			uuid[i] = uuid[i]>>4;
		}
	}

	uuidstring[37]='\0';
	printf("%s\n", uuidstring);

}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值