123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- .\" Copyright 1999 Andreas Dilger ([email protected])
- .\"
- .\" %Begin-Header%
- .\" Redistribution and use in source and binary forms, with or without
- .\" modification, are permitted provided that the following conditions
- .\" are met:
- .\" 1. Redistributions of source code must retain the above copyright
- .\" notice, and the entire permission notice in its entirety,
- .\" including the disclaimer of warranties.
- .\" 2. Redistributions in binary form must reproduce the above copyright
- .\" notice, this list of conditions and the following disclaimer in the
- .\" documentation and/or other materials provided with the distribution.
- .\" 3. The name of the author may not be used to endorse or promote
- .\" products derived from this software without specific prior
- .\" written permission.
- .\"
- .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- .\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
- .\" WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
- .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- .\" OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- .\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- .\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- .\" USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
- .\" DAMAGE.
- .\" %End-Header%
- .\"
- .\" Created Wed Mar 10 17:42:12 1999, Andreas Dilger
- .TH UUID_GENERATE 3 "May 2009" "util-linux" "Libuuid API"
- .SH NAME
- uuid_generate, uuid_generate_random, uuid_generate_time,
- uuid_generate_time_safe \- create a new unique UUID value
- .SH SYNOPSIS
- .nf
- .B #include <uuid.h>
- .sp
- .BI "void uuid_generate(uuid_t " out );
- .BI "void uuid_generate_random(uuid_t " out );
- .BI "void uuid_generate_time(uuid_t " out );
- .BI "int uuid_generate_time_safe(uuid_t " out );
- .BI "void uuid_generate_md5(uuid_t " out ", const uuid_t " ns ", const char " *name ", size_t " len ");
- .BI "void uuid_generate_sha1(uuid_t " out ", const uuid_t " ns ", const char " *name ", size_t " len ");
- .fi
- .SH DESCRIPTION
- The
- .B uuid_generate
- function creates a new universally unique identifier (UUID). The uuid will
- be generated based on high-quality randomness from
- .IR /dev/urandom ,
- if available. If it is not available, then
- .B uuid_generate
- will use an alternative algorithm which uses the current time, the
- local ethernet MAC address (if available), and random data generated
- using a pseudo-random generator.
- .sp
- The
- .B uuid_generate_random
- function forces the use of the all-random UUID format, even if
- a high-quality random number generator (i.e.,
- .IR /dev/urandom )
- is not available, in which case a pseudo-random
- generator will be substituted. Note that the use of a pseudo-random
- generator may compromise the uniqueness of UUIDs
- generated in this fashion.
- .sp
- The
- .B uuid_generate_time
- function forces the use of the alternative algorithm which uses the
- current time and the local ethernet MAC address (if available).
- This algorithm used to be the default one used to generate UUIDs, but
- because of the use of the ethernet MAC address, it can leak
- information about when and where the UUID was generated. This can cause
- privacy problems in some applications, so the
- .B uuid_generate
- function only uses this algorithm if a high-quality source of
- randomness is not available. To guarantee uniqueness of UUIDs generated
- by concurrently running processes, the uuid library uses a global
- clock state counter (if the process has permissions to gain exclusive access
- to this file) and/or the
- .B uuidd
- daemon, if it is running already or can be spawned by the process (if
- installed and the process has enough permissions to run it). If neither of
- these two synchronization mechanisms can be used, it is theoretically possible
- that two concurrently running processes obtain the same UUID(s). To tell
- whether the UUID has been generated in a safe manner, use
- .BR uuid_generate_time_safe .
- .sp
- The
- .B uuid_generate_time_safe
- function is similar to
- .BR uuid_generate_time ,
- except that it returns a value which denotes whether any of the synchronization
- mechanisms (see above) has been used.
- .sp
- The UUID is 16 bytes (128 bits) long, which gives approximately 3.4x10^38
- unique values (there are approximately 10^80 elementary particles in
- the universe according to Carl Sagan's
- .IR Cosmos ).
- The new UUID can reasonably be considered unique among all UUIDs created
- on the local system, and among UUIDs created on other systems in the past
- and in the future.
- .sp
- The
- .B uuid_generate_md5
- and
- .B uuid_generate_sha1
- functions generate an MD5 and SHA1 hashed (predictable) UUID based on a
- well-known UUID providing the namespace and an arbitrary binary string. The UUIDs
- conform to V3 and V5 UUIDs per RFC-4122.
- .SH RETURN VALUE
- The newly created UUID is returned in the memory location pointed to by
- .IR out .
- .B uuid_generate_time_safe
- returns zero if the UUID has been generated in a safe manner, \-1 otherwise.
- .SH "CONFORMING TO"
- This library generates UUIDs compatible with OSF DCE 1.1, and hash based UUIDs
- V3 and V5 compatible with RFC-4122.
- .SH AUTHOR
- Theodore Y.\& Ts'o
- .SH AVAILABILITY
- .B libuuid
- is part of the util-linux package since version 2.15.1 and is available from
- https://www.kernel.org/pub/linux/utils/util-linux/.
- .SH "SEE ALSO"
- .BR uuidgen (1),
- .BR uuid (3),
- .BR uuid_clear (3),
- .BR uuid_compare (3),
- .BR uuid_copy (3),
- .BR uuid_is_null (3),
- .BR uuid_parse (3),
- .BR uuid_time (3),
- .BR uuid_unparse (3),
- .BR uuidd (8)
|