linux下安装使用libuuid(uuid-generate)

摘要:
UUID最常用的标准是Microsoft的GUID。在ColdFusion中,您可以使用CreateUUID()函数简单地生成格式为xxxxxxxx-xxxx-xxxx-XXxxxxxxxxxxx的UUID,其中每个x都是范围为0-9a-f的十六进制数。标准UUID格式为:xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxxxxx UUID可以在Linux下通过使用libuuid的UUID生成函数来生成,以安装libuuid库libuuid是一个跨平台的开源UUID操作库。Sudoapt getinstalluuid dev也可以通过在下载地址下载源代码来安装http://nchc.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gzManuuid可以在安装后使用_ Generate来了解如何使用它。让我们先讨论uuid _ T这种类型。你可以找到uuid。h头文件,其中包含一行typedefonsigned charuuid_t[16];#include<uuid.h>voiduuid_ generate;voiduuid_ generate_随机;voiduuid_生成时间;插管生成时间安全;这里列出了其他功能。
linux下安装使用libuuid(uuid-generate)

UUID简介

UUID含义是通用唯一识别码(Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址纳秒级时间芯片ID码和许多可能的数字
UUID由以下几部分的组合:

  1. 当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
  2. 时钟序列。
  3. 全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个x0-9 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)

在linux下生成UUID可以使用libuuiduuid-generate函数

安装libuuid

libuuid是一个跨平台的开源的uuid操作库。一般的机器上默认是没有,先安装一下。

sudo apt-get install uuid-dev 

也可以下载源码来安装,下载地址http://nchc.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz

安装之后可以使用man uuid_generate来查看一下使用方法
这里先说一下uuid_t这个类型。可以找到uuid.h这个头文件,里面有一行typedef unsigned char uuid_t[16];

#include <uuid.h>
    void uuid_generate(uuid_t out);
    void uuid_generate_random(uuid_t out);
    void uuid_generate_time(uuid_t out);
    int uuid_generate_time_safe(uuid_t out);

还有一些别的函数,也在这里列出来。看函数名就指定这些函数的意思了,就不多解释。不明白之处找manpages

#include <uuid.h>
    //比较两个uuid
    int uuid_compare(uuid_t uu1, uuid_t uu2)
    //拷贝src到dst
    void uuid_copy(uuid_t dst, uuid_t src);
    //清除uu内容(清零)
    void uuid_clear(uuid_t uu);
    //判读uu是否为null
    int uuid_is_null(uuid_t uu);
    //解析in指向的字符串形式内容到uu
    int uuid_parse( char *in, uuid_t uu);
    //将uu内容解析为字符串,保存到out数组
    void uuid_unparse(uuid_t uu, char *out);
    void uuid_unparse_upper(uuid_t uu, char *out);
    void uuid_unparse_lower(uuid_t uu, char *out);
    //将基于时间创建的uu在的时间部分解析出来
    time_t uuid_time(uuid_t uu, struct timeval *ret_tv)

编写一个程序试一下

代码

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

// gcc uuid.c -luuid -o uuid

int main()
{
    int i,n;
    uuid_t uu[4];
    char buf[1024];
    struct timeval tv;
    //1、
    uuid_generate(uu[0]);
    //2、
    uuid_generate_random(uu[1]);
    //3、
    uuid_generate_time(uu[2]);
    //4、
    n = uuid_generate_time_safe(uu[3]);
    printf("n = %d
",n);
    for(i=0;i<4;++i){
        uuid_unparse(uu[i],buf);
        printf("uu[%d]		%s
",i,buf);
    }

    uuid_time(uu[2],&tv);
    printf("tv s:%lx  u:%lx
",tv.tv_sec,tv.tv_usec);


    return 0;
}

编译运行

o@o-pc:~$ gcc uuid.c  -luuid
o@o-pc:~$ ./a.out 
n = 0
uu[0]       0867a44e-b481-4fde-9b3c-1767b60702b6
uu[1]       3f39e123-288b-4cf1-adf2-77fb763530df
uu[2]       b071a71e-261a-11e5-8513-28d24473abc3
uu[3]       b071a71f-261a-11e5-8513-28d24473abc3
tv s:559e3b19  u:90543

免责声明:文章转载自《linux下安装使用libuuid(uuid-generate)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第一篇 pycharm安装及设置Mac终端命令远程开启屏幕共享进行远程控制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

转:linux的fatab文件详解

/etc/fstab是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改。        当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。下面我来介绍如何在此文件下填写信息。      ...

JavaEE系列之(二)commons-fileupload实现文件上传、下载

一、文件上传概述     实现Web开发中的文件上传功能,需要两步操作:     1、在Web页面中添加上传输入项 <form action="#" method="post" enctype="multipart/form-data"> <input type="file" name="file...

数据库主键到底是用自增长(INT)好还是UUID好

  其实针对使用自增长还是UUID,大家讨论最多的就是速度和存储空间,这里我加入了安全性和分布式,具体对比如下: 使用自增长做主键的优点:1、很小的数据存储空间2、性能最好3、容易记忆使用自增长做主键的缺点:1、如果存在大量的数据,可能会超出自增长的取值范围2、很难(并不是不能)处理分布式存储的数据表,尤其是需要合并表的情况下3、安全性低,因为是有规律的,...

centos7之vm11添加网卡

需求 根据实际需求原来有一块网卡,现在需要新加一块网卡做集群。 1、在虚拟机添加一块网卡,开机后ip a查看是不是新加了一块网卡,下图是为了讲解,其实已经是做完的状态。 2、上满我们看到新加了一块网卡叫ens37,这个时候我们需要在使用nmcli conn查看所有网卡的UUID,为了待会儿写入ens37文件里面。 3、进入网卡配置文件里面,cp ifc...

(转)blkid命令 获取文件系统类型、UUID

blkid命令 获取文件系统类型、UUID原文:https://www.cnblogs.com/dkblog/archive/2011/08/30/2159630.html 在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。...

实用向—总结一些唯一ID生成方式

在日常的项目开发中,我们经常会遇到需要生成唯一ID的业务场景,不同的业务对唯一ID的生成方式与要求都会不尽相同,一是生成方式多种多样,如UUID、雪花算法、数据库递增等;其次业务要求上也各有不同,有的只要保证唯一性即可,有的需要加上时间戳,有的要保证按顺序递增等。以下是我结合实际业务中的使用总结了几种唯一ID的生成方式,  要求就是在一般的应用场景下一方面...