.\" Copyright 1999 Andreas Dilger (adilger@enel.ucalgary.ca)
.\"
.\" %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 );
.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 UUID, 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 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
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.
.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"
OSF DCE 1.1
.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
ftp://ftp.kernel.org/pub/linux/utils/util-linux/.
.SH "SEE ALSO"
.BR uuid (3),
.BR uuidgen (1),
.BR uuidd (8),
.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)
