@node Date and Time, Resource Usage And Limitation, Arithmetic, Top
@c %MENU% Functions for getting the date and time and formatting them nicely
@chapter Date and Time

This chapter describes functions for manipulating dates and times,
including functions for determining what time it is and conversion
between different time representations.

@menu
* Time Basics::                 Concepts and definitions.
* Elapsed Time::                Data types to represent elapsed times
* Processor And CPU Time::      Time a program has spent executing.
* Calendar Time::               Manipulation of ``real'' dates and times.
* Setting an Alarm::            Sending a signal after a specified time.
* Sleeping::                    Waiting for a period of time.
@end menu


@node Time Basics
@section Time Basics
@cindex time

Discussing time in a technical manual can be difficult because the word
``time'' in English refers to lots of different things.  In this manual,
we use a rigorous terminology to avoid confusion, and the only thing we
use the simple word ``time'' for is to talk about the abstract concept.

A @dfn{calendar time} is a point in the time continuum, for example
November 4, 1990 at 18:02.5 UTC.  Sometimes this is called ``absolute
time''.
@cindex calendar time

We don't speak of a ``date'', because that is inherent in a calendar
time.
@cindex date

An @dfn{interval} is a contiguous part of the time continuum between two
calendar times, for example the hour between 9:00 and 10:00 on July 4,
1980.
@cindex interval

An @dfn{elapsed time} is the length of an interval, for example, 35
minutes.  People sometimes sloppily use the word ``interval'' to refer
to the elapsed time of some interval.
@cindex elapsed time
@cindex time, elapsed

An @dfn{amount of time} is a sum of elapsed times, which need not be of
any specific intervals.  For example, the amount of time it takes to
read a book might be 9 hours, independently of when and in how many
sittings it is read.

A @dfn{period} is the elapsed time of an interval between two events,
especially when they are part of a sequence of regularly repeating
events.
@cindex period of time

@dfn{CPU time} is like calendar time, except that it is based on the
subset of the time continuum when a particular process is actively
using a CPU.  CPU time is, therefore, relative to a process.
@cindex CPU time

@dfn{Processor time} is an amount of time that a CPU is in use.  In
fact, it's a basic system resource, since there's a limit to how much
can exist in any given interval (that limit is the elapsed time of the
interval times the number of CPUs in the processor).  People often call
this CPU time, but we reserve the latter term in this manual for the
definition above.
@cindex processor time

@node Elapsed Time
@section Elapsed Time
@cindex elapsed time

One way to represent an elapsed time is with a simple arithmetic data
type, as with the following function to compute the elapsed time between
two calendar times.  This function is declared in @file{time.h}.

@comment time.h
@comment ISO
@deftypefun double difftime (time_t @var{time1}, time_t @var{time0})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{difftime} function returns the number of seconds of elapsed
time between calendar time @var{time1} and calendar time @var{time0}, as
a value of type @code{double}.  The difference ignores leap seconds
unless leap second support is enabled.

In @theglibc{}, you can simply subtract @code{time_t} values.  But on
other systems, the @code{time_t} data type might use some other encoding
where subtraction doesn't work directly.
@end deftypefun

@Theglibc{} provides two data types specifically for representing
an elapsed time.  They are used by various @glibcadj{} functions, and
you can use them for your own purposes too.  They're exactly the same
except that one has a resolution in microseconds, and the other, newer
one, is in nanoseconds.

@comment sys/time.h
@comment BSD
@deftp {Data Type} {struct timeval}
@cindex timeval
The @code{struct timeval} structure represents an elapsed time.  It is
declared in @file{sys/time.h} and has the following members:

@table @code
@item long int tv_sec
This represents the number of whole seconds of elapsed time.

@item long int tv_usec
This is the rest of the elapsed time (a fraction of a second),
represented as the number of microseconds.  It is always less than one
million.

@end table
@end deftp

@comment sys/time.h
@comment POSIX.1
@deftp {Data Type} {struct timespec}
@cindex timespec
The @code{struct timespec} structure represents an elapsed time.  It is
declared in @file{time.h} and has the following members:

@table @code
@item long int tv_sec
This represents the number of whole seconds of elapsed time.

@item long int tv_nsec
This is the rest of the elapsed time (a fraction of a second),
represented as the number of nanoseconds.  It is always less than one
billion.

@end table
@end deftp

It is often necessary to subtract two values of type @w{@code{struct
timeval}} or @w{@code{struct timespec}}.  Here is the best way to do
this.  It works even on some peculiar operating systems where the
@code{tv_sec} member has an unsigned type.

@smallexample
@include timeval_subtract.c.texi
@end smallexample

Common functions that use @code{struct timeval} are @code{gettimeofday}
and @code{settimeofday}.


There are no @glibcadj{} functions specifically oriented toward
dealing with elapsed times, but the calendar time, processor time, and
alarm and sleeping functions have a lot to do with them.


@node Processor And CPU Time
@section Processor And CPU Time

If you're trying to optimize your program or measure its efficiency,
it's very useful to know how much processor time it uses.  For that,
calendar time and elapsed times are useless because a process may spend
time waiting for I/O or for other processes to use the CPU.  However,
you can get the information with the functions in this section.

CPU time (@pxref{Time Basics}) is represented by the data type
@code{clock_t}, which is a number of @dfn{clock ticks}.  It gives the
total amount of time a process has actively used a CPU since some
arbitrary event.  On @gnusystems{}, that event is the creation of the
process.  While arbitrary in general, the event is always the same event
for any particular process, so you can always measure how much time on
the CPU a particular computation takes by examining the process' CPU
time before and after the computation.
@cindex CPU time
@cindex clock ticks
@cindex ticks, clock

On @gnulinuxhurdsystems{}, @code{clock_t} is equivalent to @code{long int} and
@code{CLOCKS_PER_SEC} is an integer value.  But in other systems, both
@code{clock_t} and the macro @code{CLOCKS_PER_SEC} can be either integer
or floating-point types.  Casting CPU time values to @code{double}, as
in the example above, makes sure that operations such as arithmetic and
printing work properly and consistently no matter what the underlying
representation is.

Note that the clock can wrap around.  On a 32bit system with
@code{CLOCKS_PER_SEC} set to one million this function will return the
same value approximately every 72 minutes.

For additional functions to examine a process' use of processor time,
and to control it, see @ref{Resource Usage And Limitation}.


@menu
* CPU Time::                    The @code{clock} function.
* Processor Time::              The @code{times} function.
@end menu

@node CPU Time
@subsection CPU Time Inquiry

To get a process' CPU time, you can use the @code{clock} function.  This
facility is declared in the header file @file{time.h}.
@pindex time.h

In typical usage, you call the @code{clock} function at the beginning
and end of the interval you want to time, subtract the values, and then
divide by @code{CLOCKS_PER_SEC} (the number of clock ticks per second)
to get processor time, like this:

@smallexample
@group
#include <time.h>

clock_t start, end;
double cpu_time_used;

start = clock();
@dots{} /* @r{Do the work.} */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
@end group
@end smallexample

Do not use a single CPU time as an amount of time; it doesn't work that
way.  Either do a subtraction as shown above or query processor time
directly.  @xref{Processor Time}.

Different computers and operating systems vary wildly in how they keep
track of CPU time.  It's common for the internal processor clock
to have a resolution somewhere between a hundredth and millionth of a
second.

@comment time.h
@comment ISO
@deftypevr Macro int CLOCKS_PER_SEC
The value of this macro is the number of clock ticks per second measured
by the @code{clock} function.  POSIX requires that this value be one
million independent of the actual resolution.
@end deftypevr

@comment time.h
@comment ISO
@deftp {Data Type} clock_t
This is the type of the value returned by the @code{clock} function.
Values of type @code{clock_t} are numbers of clock ticks.
@end deftp

@comment time.h
@comment ISO
@deftypefun clock_t clock (void)
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c On Hurd, this calls task_info twice and adds user and system time
@c from both basic and thread time info structs.  On generic posix,
@c calls times and adds utime and stime.  On bsd, calls getrusage and
@c safely converts stime and utime to clock.  On linux, calls
@c clock_gettime.
This function returns the calling process' current CPU time.  If the CPU
time is not available or cannot be represented, @code{clock} returns the
value @code{(clock_t)(-1)}.
@end deftypefun


@node Processor Time
@subsection Processor Time Inquiry

The @code{times} function returns information about a process'
consumption of processor time in a @w{@code{struct tms}} object, in
addition to the process' CPU time.  @xref{Time Basics}.  You should
include the header file @file{sys/times.h} to use this facility.
@cindex processor time
@cindex CPU time
@pindex sys/times.h

@comment sys/times.h
@comment POSIX.1
@deftp {Data Type} {struct tms}
The @code{tms} structure is used to return information about process
times.  It contains at least the following members:

@table @code
@item clock_t tms_utime
This is the total processor time the calling process has used in
executing the instructions of its program.

@item clock_t tms_stime
This is the processor time the system has used on behalf of the calling
process.

@item clock_t tms_cutime
This is the sum of the @code{tms_utime} values and the @code{tms_cutime}
values of all terminated child processes of the calling process, whose
status has been reported to the parent process by @code{wait} or
@code{waitpid}; see @ref{Process Completion}.  In other words, it
represents the total processor time used in executing the instructions
of all the terminated child processes of the calling process, excluding
child processes which have not yet been reported by @code{wait} or
@code{waitpid}.
@cindex child process

@item clock_t tms_cstime
This is similar to @code{tms_cutime}, but represents the total processor
time system has used on behalf of all the terminated child processes
of the calling process.
@end table

All of the times are given in numbers of clock ticks.  Unlike CPU time,
these are the actual amounts of time; not relative to any event.
@xref{Creating a Process}.
@end deftp

@comment time.h
@comment POSIX.1
@deftypevr Macro int CLK_TCK
This is an obsolete name for the number of clock ticks per second.  Use
@code{sysconf (_SC_CLK_TCK)} instead.
@end deftypevr

@comment sys/times.h
@comment POSIX.1
@deftypefun clock_t times (struct tms *@var{buffer})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c On HURD, this calls task_info twice, for basic and thread times info,
@c adding user and system times into tms, and then gettimeofday, to
@c compute the real time.  On BSD, it calls getclktck, getrusage (twice)
@c and time.  On Linux, it's a syscall with special handling to account
@c for clock_t counts that look like error values.
The @code{times} function stores the processor time information for
the calling process in @var{buffer}.

The return value is the number of clock ticks since an arbitrary point
in the past, e.g. since system start-up.  @code{times} returns
@code{(clock_t)(-1)} to indicate failure.
@end deftypefun

@strong{Portability Note:} The @code{clock} function described in
@ref{CPU Time} is specified by the @w{ISO C} standard.  The
@code{times} function is a feature of POSIX.1.  On @gnusystems{}, the
CPU time is defined to be equivalent to the sum of the @code{tms_utime}
and @code{tms_stime} fields returned by @code{times}.

@node Calendar Time
@section Calendar Time

This section describes facilities for keeping track of calendar time.
@xref{Time Basics}.

@Theglibc{} represents calendar time three ways:

@itemize @bullet
@item
@dfn{Simple time} (the @code{time_t} data type) is a compact
representation, typically giving the number of seconds of elapsed time
since some implementation-specific base time.
@cindex simple time

@item
There is also a "high-resolution time" representation.  Like simple
time, this represents a calendar time as an elapsed time since a base
time, but instead of measuring in whole seconds, it uses a @code{struct
timeval} data type, which includes fractions of a second.  Use this time
representation instead of simple time when you need greater precision.
@cindex high-resolution time

@item
@dfn{Local time} or @dfn{broken-down time} (the @code{struct tm} data
type) represents a calendar time as a set of components specifying the
year, month, and so on in the Gregorian calendar, for a specific time
zone.  This calendar time representation is usually used only to
communicate with people.
@cindex local time
@cindex broken-down time
@cindex Gregorian calendar
@cindex calendar, Gregorian
@end itemize

@menu
* Simple Calendar Time::        Facilities for manipulating calendar time.
* High-Resolution Calendar::    A time representation with greater precision.
* Broken-down Time::            Facilities for manipulating local time.
* High Accuracy Clock::         Maintaining a high accuracy system clock.
* Formatting Calendar Time::    Converting times to strings.
* Parsing Date and Time::       Convert textual time and date information back
                                 into broken-down time values.
* TZ Variable::                 How users specify the time zone.
* Time Zone Functions::         Functions to examine or specify the time zone.
* Time Functions Example::      An example program showing use of some of
				 the time functions.
@end menu

@node Simple Calendar Time
@subsection Simple Calendar Time

This section describes the @code{time_t} data type for representing calendar
time as simple time, and the functions which operate on simple time objects.
These facilities are declared in the header file @file{time.h}.
@pindex time.h

@cindex epoch
@comment time.h
@comment ISO
@deftp {Data Type} time_t
This is the data type used to represent simple time.  Sometimes, it also
represents an elapsed time.  When interpreted as a calendar time value,
it represents the number of seconds elapsed since 00:00:00 on January 1,
1970, Coordinated Universal Time.  (This calendar time is sometimes
referred to as the @dfn{epoch}.)  POSIX requires that this count not
include leap seconds, but on some systems this count includes leap seconds
if you set @code{TZ} to certain values (@pxref{TZ Variable}).

Note that a simple time has no concept of local time zone.  Calendar
Time @var{T} is the same instant in time regardless of where on the
globe the computer is.

In @theglibc{}, @code{time_t} is equivalent to @code{long int}.
In other systems, @code{time_t} might be either an integer or
floating-point type.
@end deftp

The function @code{difftime} tells you the elapsed time between two
simple calendar times, which is not always as easy to compute as just
subtracting.  @xref{Elapsed Time}.

@comment time.h
@comment ISO
@deftypefun time_t time (time_t *@var{result})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{time} function returns the current calendar time as a value of
type @code{time_t}.  If the argument @var{result} is not a null pointer,
the calendar time value is also stored in @code{*@var{result}}.  If the
current calendar time is not available, the value
@w{@code{(time_t)(-1)}} is returned.
@end deftypefun

@c The GNU C library implements stime() with a call to settimeofday() on
@c Linux.
@comment time.h
@comment SVID, XPG
@deftypefun int stime (const time_t *@var{newtime})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c On unix, this is implemented in terms of settimeofday.
@code{stime} sets the system clock, i.e., it tells the system that the
current calendar time is @var{newtime}, where @code{newtime} is
interpreted as described in the above definition of @code{time_t}.

@code{settimeofday} is a newer function which sets the system clock to
better than one second precision.  @code{settimeofday} is generally a
better choice than @code{stime}.  @xref{High-Resolution Calendar}.

Only the superuser can set the system clock.

If the function succeeds, the return value is zero.  Otherwise, it is
@code{-1} and @code{errno} is set accordingly:

@table @code
@item EPERM
The process is not superuser.
@end table
@end deftypefun



@node High-Resolution Calendar
@subsection High-Resolution Calendar

The @code{time_t} data type used to represent simple times has a
resolution of only one second.  Some applications need more precision.

So, @theglibc{} also contains functions which are capable of
representing calendar times to a higher resolution than one second.  The
functions and the associated data types described in this section are
declared in @file{sys/time.h}.
@pindex sys/time.h

@comment sys/time.h
@comment BSD
@deftp {Data Type} {struct timezone}
The @code{struct timezone} structure is used to hold minimal information
about the local time zone.  It has the following members:

@table @code
@item int tz_minuteswest
This is the number of minutes west of UTC.

@item int tz_dsttime
If nonzero, Daylight Saving Time applies during some part of the year.
@end table

The @code{struct timezone} type is obsolete and should never be used.
Instead, use the facilities described in @ref{Time Zone Functions}.
@end deftp

@comment sys/time.h
@comment BSD
@deftypefun int gettimeofday (struct timeval *@var{tp}, struct timezone *@var{tzp})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c On most GNU/Linux systems this is a direct syscall, but the posix/
@c implementation (not used on GNU/Linux or GNU/Hurd) relies on time and
@c localtime_r, saving and restoring tzname in an unsafe manner.
@c On some GNU/Linux variants, ifunc resolvers are used in shared libc
@c for vdso resolution.  ifunc-vdso-revisit.
The @code{gettimeofday} function returns the current calendar time as
the elapsed time since the epoch in the @code{struct timeval} structure
indicated by @var{tp}.  (@pxref{Elapsed Time} for a description of
@code{struct timeval}).  Information about the time zone is returned in
the structure pointed at @var{tzp}.  If the @var{tzp} argument is a null
pointer, time zone information is ignored.

The return value is @code{0} on success and @code{-1} on failure.  The
following @code{errno} error condition is defined for this function:

@table @code
@item ENOSYS
The operating system does not support getting time zone information, and
@var{tzp} is not a null pointer.  @gnusystems{} do not
support using @w{@code{struct timezone}} to represent time zone
information; that is an obsolete feature of 4.3 BSD.
Instead, use the facilities described in @ref{Time Zone Functions}.
@end table
@end deftypefun

@comment sys/time.h
@comment BSD
@deftypefun int settimeofday (const struct timeval *@var{tp}, const struct timezone *@var{tzp})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c On HURD, it calls host_set_time with a privileged port.  On other
@c unix systems, it's a syscall.
The @code{settimeofday} function sets the current calendar time in the
system clock according to the arguments.  As for @code{gettimeofday},
the calendar time is represented as the elapsed time since the epoch.
As for @code{gettimeofday}, time zone information is ignored if
@var{tzp} is a null pointer.

You must be a privileged user in order to use @code{settimeofday}.

Some kernels automatically set the system clock from some source such as
a hardware clock when they start up.  Others, including Linux, place the
system clock in an ``invalid'' state (in which attempts to read the clock
fail).  A call of @code{stime} removes the system clock from an invalid
state, and system startup scripts typically run a program that calls
@code{stime}.

@code{settimeofday} causes a sudden jump forwards or backwards, which
can cause a variety of problems in a system.  Use @code{adjtime} (below)
to make a smooth transition from one time to another by temporarily
speeding up or slowing down the clock.

With a Linux kernel, @code{adjtimex} does the same thing and can also
make permanent changes to the speed of the system clock so it doesn't
need to be corrected as often.

The return value is @code{0} on success and @code{-1} on failure.  The
following @code{errno} error conditions are defined for this function:

@table @code
@item EPERM
This process cannot set the clock because it is not privileged.

@item ENOSYS
The operating system does not support setting time zone information, and
@var{tzp} is not a null pointer.
@end table
@end deftypefun

@c On Linux, GNU libc implements adjtime() as a call to adjtimex().
@comment sys/time.h
@comment BSD
@deftypefun int adjtime (const struct timeval *@var{delta}, struct timeval *@var{olddelta})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c On hurd and mach, call host_adjust_time with a privileged port.  On
@c Linux, it's implemented in terms of adjtimex.  On other unixen, it's
@c a syscall.
This function speeds up or slows down the system clock in order to make
a gradual adjustment.  This ensures that the calendar time reported by
the system clock is always monotonically increasing, which might not
happen if you simply set the clock.

The @var{delta} argument specifies a relative adjustment to be made to
the clock time.  If negative, the system clock is slowed down for a
while until it has lost this much elapsed time.  If positive, the system
clock is speeded up for a while.

If the @var{olddelta} argument is not a null pointer, the @code{adjtime}
function returns information about any previous time adjustment that
has not yet completed.

This function is typically used to synchronize the clocks of computers
in a local network.  You must be a privileged user to use it.

With a Linux kernel, you can use the @code{adjtimex} function to
permanently change the clock speed.

The return value is @code{0} on success and @code{-1} on failure.  The
following @code{errno} error condition is defined for this function:

@table @code
@item EPERM
You do not have privilege to set the time.
@end table
@end deftypefun

@strong{Portability Note:}  The @code{gettimeofday}, @code{settimeofday},
and @code{adjtime} functions are derived from BSD.


Symbols for the following function are declared in @file{sys/timex.h}.

@comment sys/timex.h
@comment GNU
@deftypefun int adjtimex (struct timex *@var{timex})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c It's a syscall, only available on linux.

@code{adjtimex} is functionally identical to @code{ntp_adjtime}.
@xref{High Accuracy Clock}.

This function is present only with a Linux kernel.

@end deftypefun

@node Broken-down Time
@subsection Broken-down Time
@cindex broken-down time
@cindex calendar time and broken-down time

Calendar time is represented by the usual @glibcadj{} functions as an
elapsed time since a fixed base calendar time.  This is convenient for
computation, but has no relation to the way people normally think of
calendar time.  By contrast, @dfn{broken-down time} is a binary
representation of calendar time separated into year, month, day, and so
on.  Broken-down time values are not useful for calculations, but they
are useful for printing human readable time information.

A broken-down time value is always relative to a choice of time
zone, and it also indicates which time zone that is.

The symbols in this section are declared in the header file @file{time.h}.

@comment time.h
@comment ISO
@deftp {Data Type} {struct tm}
This is the data type used to represent a broken-down time.  The structure
contains at least the following members, which can appear in any order.

@table @code
@item int tm_sec
This is the number of full seconds since the top of the minute (normally
in the range @code{0} through @code{59}, but the actual upper limit is
@code{60}, to allow for leap seconds if leap second support is
available).
@cindex leap second

@item int tm_min
This is the number of full minutes since the top of the hour (in the
range @code{0} through @code{59}).

@item int tm_hour
This is the number of full hours past midnight (in the range @code{0} through
@code{23}).

@item int tm_mday
This is the ordinal day of the month (in the range @code{1} through @code{31}).
Watch out for this one!  As the only ordinal number in the structure, it is
inconsistent with the rest of the structure.

@item int tm_mon
This is the number of full calendar months since the beginning of the
year (in the range @code{0} through @code{11}).  Watch out for this one!
People usually use ordinal numbers for month-of-year (where January = 1).

@item int tm_year
This is the number of full calendar years since 1900.

@item int tm_wday
This is the number of full days since Sunday (in the range @code{0} through
@code{6}).

@item int tm_yday
This is the number of full days since the beginning of the year (in the
range @code{0} through @code{365}).

@item int tm_isdst
@cindex Daylight Saving Time
@cindex summer time
This is a flag that indicates whether Daylight Saving Time is (or was, or
will be) in effect at the time described.  The value is positive if
Daylight Saving Time is in effect, zero if it is not, and negative if the
information is not available.

@item long int tm_gmtoff
This field describes the time zone that was used to compute this
broken-down time value, including any adjustment for daylight saving; it
is the number of seconds that you must add to UTC to get local time.
You can also think of this as the number of seconds east of UTC.  For
example, for U.S. Eastern Standard Time, the value is @code{-5*60*60}.
The @code{tm_gmtoff} field is derived from BSD and is a GNU library
extension; it is not visible in a strict @w{ISO C} environment.

@item const char *tm_zone
This field is the name for the time zone that was used to compute this
broken-down time value.  Like @code{tm_gmtoff}, this field is a BSD and
GNU extension, and is not visible in a strict @w{ISO C} environment.
@end table
@end deftp


@comment time.h
@comment ISO
@deftypefun {struct tm *} localtime (const time_t *@var{time})
@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c Calls tz_convert with a static buffer.
@c localtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
The @code{localtime} function converts the simple time pointed to by
@var{time} to broken-down time representation, expressed relative to the
user's specified time zone.

The return value is a pointer to a static broken-down time structure, which
might be overwritten by subsequent calls to @code{ctime}, @code{gmtime},
or @code{localtime}.  (But no other library function overwrites the contents
of this object.)

The return value is the null pointer if @var{time} cannot be represented
as a broken-down time; typically this is because the year cannot fit into
an @code{int}.

Calling @code{localtime} also sets the current time zone as if
@code{tzset} were called.  @xref{Time Zone Functions}.
@end deftypefun

Using the @code{localtime} function is a big problem in multi-threaded
programs.  The result is returned in a static buffer and this is used in
all threads.  POSIX.1c introduced a variant of this function.

@comment time.h
@comment POSIX.1c
@deftypefun {struct tm *} localtime_r (const time_t *@var{time}, struct tm *@var{resultp})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c localtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  tz_convert(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   libc_lock_lock dup @asulock @aculock
@c   tzset_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c     always called with tzset_lock held
@c     sets static is_initialized before initialization;
@c     reads and sets old_tz; sets tz_rules.
@c     some of the issues only apply on the first call.
@c     subsequent calls only trigger these when called by localtime;
@c     otherwise, they're ok.
@c    getenv dup @mtsenv
@c    strcmp dup ok
@c    strdup @ascuheap
@c    tzfile_read @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c     memcmp dup ok
@c     strstr dup ok
@c     getenv dup @mtsenv
@c     asprintf dup @mtslocale @ascuheap @acsmem
@c     stat64 dup ok
@c     fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
@c     fileno dup ok
@c     fstat64 dup ok
@c     fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
@c     free dup @ascuheap @acsmem
@c     fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive]
@c     fread_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
@c     memcpy dup ok
@c     decode ok
@c      bswap_32 dup ok
@c     fseek dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
@c     ftello dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
@c     malloc dup @ascuheap @acsmem
@c     decode64 ok
@c      bswap_64 dup ok
@c     getc_unlocked ok [no @mtasurace:stream @asucorrupt @acucorrupt]
@c     tzstring dup @ascuheap @acsmem
@c     compute_tzname_max dup ok [guarded by tzset_lock]
@c    memset dup ok
@c    update_vars ok [guarded by tzset_lock]
@c      sets daylight, timezone, tzname and tzname_cur_max;
@c      called only with tzset_lock held, unless tzset_parse_tz
@c      (internal, but not static) gets called by users; given the its
@c      double-underscore-prefixed name, this interface violation could
@c      be regarded as undefined behavior.
@c     strlen ok
@c    tzset_parse_tz @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c     sscanf dup @mtslocale @ascuheap @acsmem
@c     isalnum dup @mtsenv
@c     tzstring @ascuheap @acsmem
@c       reads and changes tzstring_list without synchronization, but
@c       only called with tzset_lock held (save for interface violations)
@c      strlen dup ok
@c      malloc dup @ascuheap @acsmem
@c      strcpy dup ok
@c     isdigit dup @mtslocale
@c     compute_offset ok
@c     tzfile_default @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c       sets tzname, timezone, types, zone_names, rule_*off, etc; no guards
@c      strlen dup ok
@c      tzfile_read dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c      mempcpy dup ok
@c      compute_tzname_max ok [if guarded by tzset_lock]
@c        iterates over zone_names; no guards
@c     free dup @ascuheap @acsmem
@c     strtoul dup @mtslocale
@c     update_vars dup ok
@c   tzfile_compute(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c     sets tzname; no guards.  with !use_localtime, as in gmtime, it's ok
@c    tzstring dup @acsuheap @acsmem
@c    tzset_parse_tz dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    offtime dup ok
@c    tz_compute dup ok
@c    strcmp dup ok
@c   offtime ok
@c    isleap dup ok
@c   tz_compute ok
@c    compute_change ok
@c     isleap ok
@c   libc_lock_unlock dup @aculock

The @code{localtime_r} function works just like the @code{localtime}
function.  It takes a pointer to a variable containing a simple time
and converts it to the broken-down time format.

But the result is not placed in a static buffer.  Instead it is placed
in the object of type @code{struct tm} to which the parameter
@var{resultp} points.

If the conversion is successful the function returns a pointer to the
object the result was written into, i.e., it returns @var{resultp}.
@end deftypefun


@comment time.h
@comment ISO
@deftypefun {struct tm *} gmtime (const time_t *@var{time})
@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c gmtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
This function is similar to @code{localtime}, except that the broken-down
time is expressed as Coordinated Universal Time (UTC) (formerly called
Greenwich Mean Time (GMT)) rather than relative to a local time zone.

@end deftypefun

As for the @code{localtime} function we have the problem that the result
is placed in a static variable.  POSIX.1c also provides a replacement for
@code{gmtime}.

@comment time.h
@comment POSIX.1c
@deftypefun {struct tm *} gmtime_r (const time_t *@var{time}, struct tm *@var{resultp})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c You'd think tz_convert could avoid some safety issues with
@c !use_localtime, but no such luck: tzset_internal will always bring
@c about all possible AS and AC problems when it's first called.
@c Calling any of localtime,gmtime_r once would run the initialization
@c and avoid the heap, mem and fd issues in gmtime* in subsequent calls,
@c but the unsafe locking would remain.
@c gmtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  tz_convert(gmtime_r) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
This function is similar to @code{localtime_r}, except that it converts
just like @code{gmtime} the given time as Coordinated Universal Time.

If the conversion is successful the function returns a pointer to the
object the result was written into, i.e., it returns @var{resultp}.
@end deftypefun


@comment time.h
@comment ISO
@deftypefun time_t mktime (struct tm *@var{brokentime})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c mktime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   passes a static localtime_offset to mktime_internal; it is read
@c   once, used as an initial guess, and updated at the end, but not
@c   used except as a guess for subsequent calls, so it should be safe.
@c   Even though a compiler might delay the load and perform it multiple
@c   times (bug 16346), there are at least two unconditional uses of the
@c   auto variable in which the first load is stored, separated by a
@c   call to an external function, and a conditional change of the
@c   variable before the external call, so refraining from allocating a
@c   local variable at the first load would be a very bad optimization.
@c  tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  mktime_internal(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   ydhms_diff ok
@c   ranged_convert(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    *convert = localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    time_t_avg dup ok
@c   guess_time_tm dup ok
@c    ydhms_diff dup ok
@c    time_t_add_ok ok
@c     time_t_avg ok
@c   isdst_differ ok
@c   time_t_int_add_ok ok
The @code{mktime} function converts a broken-down time structure to a
simple time representation.  It also normalizes the contents of the
broken-down time structure, and fills in some components based on the
values of the others.

The @code{mktime} function ignores the specified contents of the
@code{tm_wday}, @code{tm_yday}, @code{tm_gmtoff}, and @code{tm_zone}
members of the broken-down time
structure.  It uses the values of the other components to determine the
calendar time; it's permissible for these components to have
unnormalized values outside their normal ranges.  The last thing that
@code{mktime} does is adjust the components of the @var{brokentime}
structure, including the members that were initially ignored.

If the specified broken-down time cannot be represented as a simple time,
@code{mktime} returns a value of @code{(time_t)(-1)} and does not modify
the contents of @var{brokentime}.

Calling @code{mktime} also sets the current time zone as if
@code{tzset} were called; @code{mktime} uses this information instead
of @var{brokentime}'s initial @code{tm_gmtoff} and @code{tm_zone}
members.  @xref{Time Zone Functions}.
@end deftypefun

@comment time.h
@comment ???
@deftypefun time_t timelocal (struct tm *@var{brokentime})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c Alias to mktime.

@code{timelocal} is functionally identical to @code{mktime}, but more
mnemonically named.  Note that it is the inverse of the @code{localtime}
function.

@strong{Portability note:}  @code{mktime} is essentially universally
available.  @code{timelocal} is rather rare.

@end deftypefun

@comment time.h
@comment ???
@deftypefun time_t timegm (struct tm *@var{brokentime})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c timegm @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   gmtime_offset triggers the same caveats as localtime_offset in mktime.
@c   although gmtime_r, as called by mktime, might save some issues,
@c   tzset calls tzset_internal with always, which forces
@c   reinitialization, so all issues may arise.
@c  tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  mktime_internal(gmtime_r) @asulock @aculock
@c ..gmtime_r @asulock @aculock
@c    ... dup ok
@c    tz_convert(!use_localtime) @asulock @aculock
@c     ... dup @asulock @aculock
@c     tzfile_compute(!use_localtime) ok

@code{timegm} is functionally identical to @code{mktime} except it
always takes the input values to be Coordinated Universal Time (UTC)
regardless of any local time zone setting.

Note that @code{timegm} is the inverse of @code{gmtime}.

@strong{Portability note:}  @code{mktime} is essentially universally
available.  @code{timegm} is rather rare.  For the most portable
conversion from a UTC broken-down time to a simple time, set
the @code{TZ} environment variable to UTC, call @code{mktime}, then set
@code{TZ} back.

@end deftypefun



@node High Accuracy Clock
@subsection High Accuracy Clock

@cindex time, high precision
@cindex clock, high accuracy
@pindex sys/timex.h
@c On Linux, GNU libc implements ntp_gettime() and npt_adjtime() as calls
@c to adjtimex().
The @code{ntp_gettime} and @code{ntp_adjtime} functions provide an
interface to monitor and manipulate the system clock to maintain high
accuracy time.  For example, you can fine tune the speed of the clock
or synchronize it with another time source.

A typical use of these functions is by a server implementing the Network
Time Protocol to synchronize the clocks of multiple systems and high
precision clocks.

These functions are declared in @file{sys/timex.h}.

@tindex struct ntptimeval
@deftp {Data Type} {struct ntptimeval}
This structure is used for information about the system clock.  It
contains the following members:
@table @code
@item struct timeval time
This is the current calendar time, expressed as the elapsed time since
the epoch.  The @code{struct timeval} data type is described in
@ref{Elapsed Time}.

@item long int maxerror
This is the maximum error, measured in microseconds.  Unless updated
via @code{ntp_adjtime} periodically, this value will reach some
platform-specific maximum value.

@item long int esterror
This is the estimated error, measured in microseconds.  This value can
be set by @code{ntp_adjtime} to indicate the estimated offset of the
system clock from the true calendar time.
@end table
@end deftp

@comment sys/timex.h
@comment GNU
@deftypefun int ntp_gettime (struct ntptimeval *@var{tptr})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c Wrapper for adjtimex.
The @code{ntp_gettime} function sets the structure pointed to by
@var{tptr} to current values.  The elements of the structure afterwards
contain the values the timer implementation in the kernel assumes.  They
might or might not be correct.  If they are not a @code{ntp_adjtime}
call is necessary.

The return value is @code{0} on success and other values on failure.  The
following @code{errno} error conditions are defined for this function:

@table @code
@item TIME_ERROR
The precision clock model is not properly set up at the moment, thus the
clock must be considered unsynchronized, and the values should be
treated with care.
@end table
@end deftypefun

@tindex struct timex
@deftp {Data Type} {struct timex}
This structure is used to control and monitor the system clock.  It
contains the following members:
@table @code
@item unsigned int modes
This variable controls whether and which values are set.  Several
symbolic constants have to be combined with @emph{binary or} to specify
the effective mode.  These constants start with @code{MOD_}.

@item long int offset
This value indicates the current offset of the system clock from the true
calendar time.  The value is given in microseconds.  If bit
@code{MOD_OFFSET} is set in @code{modes}, the offset (and possibly other
dependent values) can be set.  The offset's absolute value must not
exceed @code{MAXPHASE}.


@item long int frequency
This value indicates the difference in frequency between the true
calendar time and the system clock.  The value is expressed as scaled
PPM (parts per million, 0.0001%).  The scaling is @code{1 <<
SHIFT_USEC}.  The value can be set with bit @code{MOD_FREQUENCY}, but
the absolute value must not exceed @code{MAXFREQ}.

@item long int maxerror
This is the maximum error, measured in microseconds.  A new value can be
set using bit @code{MOD_MAXERROR}.  Unless updated via
@code{ntp_adjtime} periodically, this value will increase steadily
and reach some platform-specific maximum value.

@item long int esterror
This is the estimated error, measured in microseconds.  This value can
be set using bit @code{MOD_ESTERROR}.

@item int status
This variable reflects the various states of the clock machinery.  There
are symbolic constants for the significant bits, starting with
@code{STA_}.  Some of these flags can be updated using the
@code{MOD_STATUS} bit.

@item long int constant
This value represents the bandwidth or stiffness of the PLL (phase
locked loop) implemented in the kernel.  The value can be changed using
bit @code{MOD_TIMECONST}.

@item long int precision
This value represents the accuracy or the maximum error when reading the
system clock.  The value is expressed in microseconds.

@item long int tolerance
This value represents the maximum frequency error of the system clock in
scaled PPM.  This value is used to increase the @code{maxerror} every
second.

@item struct timeval time
The current calendar time.

@item long int tick
The elapsed time between clock ticks in microseconds.  A clock tick is a
periodic timer interrupt on which the system clock is based.

@item long int ppsfreq
This is the first of a few optional variables that are present only if
the system clock can use a PPS (pulse per second) signal to discipline
the system clock.  The value is expressed in scaled PPM and it denotes
the difference in frequency between the system clock and the PPS signal.

@item long int jitter
This value expresses a median filtered average of the PPS signal's
dispersion in microseconds.

@item int shift
This value is a binary exponent for the duration of the PPS calibration
interval, ranging from @code{PPS_SHIFT} to @code{PPS_SHIFTMAX}.

@item long int stabil
This value represents the median filtered dispersion of the PPS
frequency in scaled PPM.

@item long int jitcnt
This counter represents the number of pulses where the jitter exceeded
the allowed maximum @code{MAXTIME}.

@item long int calcnt
This counter reflects the number of successful calibration intervals.

@item long int errcnt
This counter represents the number of calibration errors (caused by
large offsets or jitter).

@item long int stbcnt
This counter denotes the number of calibrations where the stability
exceeded the threshold.
@end table
@end deftp

@comment sys/timex.h
@comment GNU
@deftypefun int ntp_adjtime (struct timex *@var{tptr})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c Alias to adjtimex syscall.
The @code{ntp_adjtime} function sets the structure specified by
@var{tptr} to current values.

In addition, @code{ntp_adjtime} updates some settings to match what you
pass to it in *@var{tptr}.  Use the @code{modes} element of *@var{tptr}
to select what settings to update.  You can set @code{offset},
@code{freq}, @code{maxerror}, @code{esterror}, @code{status},
@code{constant}, and @code{tick}.

@code{modes} = zero means set nothing.

Only the superuser can update settings.

@c On Linux, ntp_adjtime() also does the adjtime() function if you set
@c modes = ADJ_OFFSET_SINGLESHOT (in fact, that is how GNU libc implements
@c adjtime()).  But this should be considered an internal function because
@c it's so inconsistent with the rest of what ntp_adjtime() does and is
@c forced in an ugly way into the struct timex.  So we don't document it
@c and instead document adjtime() as the way to achieve the function.

The return value is @code{0} on success and other values on failure.  The
following @code{errno} error conditions are defined for this function:

@table @code
@item TIME_ERROR
The high accuracy clock model is not properly set up at the moment, thus the
clock must be considered unsynchronized, and the values should be
treated with care.  Another reason could be that the specified new values
are not allowed.

@item EPERM
The process specified a settings update, but is not superuser.

@end table

For more details see RFC1305 (Network Time Protocol, Version 3) and
related documents.

@strong{Portability note:} Early versions of @theglibc{} did not
have this function but did have the synonymous @code{adjtimex}.

@end deftypefun


@node Formatting Calendar Time
@subsection Formatting Calendar Time

The functions described in this section format calendar time values as
strings.  These functions are declared in the header file @file{time.h}.
@pindex time.h

@comment time.h
@comment ISO
@deftypefun {char *} asctime (const struct tm *@var{brokentime})
@safety{@prelim{}@mtunsafe{@mtasurace{:asctime} @mtslocale{}}@asunsafe{}@acsafe{}}
@c asctime @mtasurace:asctime @mtslocale
@c   Uses a static buffer.
@c  asctime_internal @mtslocale
@c   snprintf dup @mtslocale [no @acsuheap @acsmem]
@c   ab_day_name @mtslocale
@c   ab_month_name @mtslocale
The @code{asctime} function converts the broken-down time value that
@var{brokentime} points to into a string in a standard format:

@smallexample
"Tue May 21 13:46:22 1991\n"
@end smallexample

The abbreviations for the days of week are: @samp{Sun}, @samp{Mon},
@samp{Tue}, @samp{Wed}, @samp{Thu}, @samp{Fri}, and @samp{Sat}.

The abbreviations for the months are: @samp{Jan}, @samp{Feb},
@samp{Mar}, @samp{Apr}, @samp{May}, @samp{Jun}, @samp{Jul}, @samp{Aug},
@samp{Sep}, @samp{Oct}, @samp{Nov}, and @samp{Dec}.

The return value points to a statically allocated string, which might be
overwritten by subsequent calls to @code{asctime} or @code{ctime}.
(But no other library function overwrites the contents of this
string.)
@end deftypefun

@comment time.h
@comment POSIX.1c
@deftypefun {char *} asctime_r (const struct tm *@var{brokentime}, char *@var{buffer})
@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
@c asctime_r @mtslocale
@c  asctime_internal dup @mtslocale
This function is similar to @code{asctime} but instead of placing the
result in a static buffer it writes the string in the buffer pointed to
by the parameter @var{buffer}.  This buffer should have room
for at least 26 bytes, including the terminating null.

If no error occurred the function returns a pointer to the string the
result was written into, i.e., it returns @var{buffer}.  Otherwise
return @code{NULL}.
@end deftypefun


@comment time.h
@comment ISO
@deftypefun {char *} ctime (const time_t *@var{time})
@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtasurace{:asctime} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c ctime @mtasurace:tmbuf @mtasurace:asctime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  localtime dup @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  asctime dup @mtasurace:asctime @mtslocale
The @code{ctime} function is similar to @code{asctime}, except that you
specify the calendar time argument as a @code{time_t} simple time value
rather than in broken-down local time format.  It is equivalent to

@smallexample
asctime (localtime (@var{time}))
@end smallexample

Calling @code{ctime} also sets the current time zone as if
@code{tzset} were called.  @xref{Time Zone Functions}.
@end deftypefun

@comment time.h
@comment POSIX.1c
@deftypefun {char *} ctime_r (const time_t *@var{time}, char *@var{buffer})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c ctime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  asctime_r dup @mtslocale
This function is similar to @code{ctime}, but places the result in the
string pointed to by @var{buffer}.  It is equivalent to (written using
gcc extensions, @pxref{Statement Exprs,,,gcc,Porting and Using gcc}):

@smallexample
(@{ struct tm tm; asctime_r (localtime_r (time, &tm), buf); @})
@end smallexample

If no error occurred the function returns a pointer to the string the
result was written into, i.e., it returns @var{buffer}.  Otherwise
return @code{NULL}.
@end deftypefun


@comment time.h
@comment ISO
@deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
@c strftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c  strftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c   strftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c    add ok
@c     memset_zero dup ok
@c     memset_space dup ok
@c    strlen dup ok
@c    mbrlen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps]
@c    mbsinit dup ok
@c    cpy ok
@c     add dup ok
@c     memcpy_lowcase ok
@c      TOLOWER ok
@c       tolower_l ok
@c     memcpy_uppcase ok
@c      TOUPPER ok
@c       toupper_l ok
@c     MEMCPY ok
@c      memcpy dup ok
@c    ISDIGIT ok
@c    STRLEN ok
@c     strlen dup ok
@c    strftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c    TOUPPER dup ok
@c    nl_get_era_entry @ascuheap @asulock @acsmem @aculock
@c     nl_init_era_entries @ascuheap @asulock @acsmem @aculock
@c      libc_rwlock_wrlock dup @asulock @aculock
@c      malloc dup @ascuheap @acsmem
@c      memset dup ok
@c      free dup @ascuheap @acsmem
@c      realloc dup @ascuheap @acsmem
@c      memcpy dup ok
@c      strchr dup ok
@c      wcschr dup ok
@c      libc_rwlock_unlock dup @asulock @aculock
@c     ERA_DATE_CMP ok
@c    DO_NUMBER ok
@c    DO_NUMBER_SPACEPAD ok
@c    nl_get_alt_digit @ascuheap @asulock @acsmem @aculock
@c     libc_rwlock_wrlock dup @asulock @aculock
@c     nl_init_alt_digit @ascuheap @acsmem
@c      malloc dup @ascuheap @acsmem
@c      memset dup ok
@c      strchr dup ok
@c     libc_rwlock_unlock dup @aculock
@c    memset_space ok
@c     memset dup ok
@c    memset_zero ok
@c     memset dup ok
@c    mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    iso_week_days ok
@c    isleap ok
@c    tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    tm_diff ok
This function is similar to the @code{sprintf} function (@pxref{Formatted
Input}), but the conversion specifications that can appear in the format
template @var{template} are specialized for printing components of the date
and time @var{brokentime} according to the locale currently specified for
time conversion (@pxref{Locales}) and the current time zone
(@pxref{Time Zone Functions}).

Ordinary characters appearing in the @var{template} are copied to the
output string @var{s}; this can include multibyte character sequences.
Conversion specifiers are introduced by a @samp{%} character, followed
by an optional flag which can be one of the following.  These flags
are all GNU extensions. The first three affect only the output of
numbers:

@table @code
@item _
The number is padded with spaces.

@item -
The number is not padded at all.

@item 0
The number is padded with zeros even if the format specifies padding
with spaces.

@item ^
The output uses uppercase characters, but only if this is possible
(@pxref{Case Conversion}).
@end table

The default action is to pad the number with zeros to keep it a constant
width.  Numbers that do not have a range indicated below are never
padded, since there is no natural width for them.

Following the flag an optional specification of the width is possible.
This is specified in decimal notation.  If the natural size of the
output is of the field has less than the specified number of characters,
the result is written right adjusted and space padded to the given
size.

An optional modifier can follow the optional flag and width
specification.  The modifiers, which were first standardized by
POSIX.2-1992 and by @w{ISO C99}, are:

@table @code
@item E
Use the locale's alternate representation for date and time.  This
modifier applies to the @code{%c}, @code{%C}, @code{%x}, @code{%X},
@code{%y} and @code{%Y} format specifiers.  In a Japanese locale, for
example, @code{%Ex} might yield a date format based on the Japanese
Emperors' reigns.

@item O
Use the locale's alternate numeric symbols for numbers.  This modifier
applies only to numeric format specifiers.
@end table

If the format supports the modifier but no alternate representation
is available, it is ignored.

The conversion specifier ends with a format specifier taken from the
following list.  The whole @samp{%} sequence is replaced in the output
string as follows:

@table @code
@item %a
The abbreviated weekday name according to the current locale.

@item %A
The full weekday name according to the current locale.

@item %b
The abbreviated month name according to the current locale.

@item %B
The full month name according to the current locale.

Using @code{%B} together with @code{%d} produces grammatically
incorrect results for some locales.

@item %c
The preferred calendar time representation for the current locale.

@item %C
The century of the year.  This is equivalent to the greatest integer not
greater than the year divided by 100.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %d
The day of the month as a decimal number (range @code{01} through @code{31}).

@item %D
The date using the format @code{%m/%d/%y}.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %e
The day of the month like with @code{%d}, but padded with blank (range
@code{ 1} through @code{31}).

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %F
The date using the format @code{%Y-%m-%d}.  This is the form specified
in the @w{ISO 8601} standard and is the preferred form for all uses.

This format was first standardized by @w{ISO C99} and by POSIX.1-2001.

@item %g
The year corresponding to the ISO week number, but without the century
(range @code{00} through @code{99}).  This has the same format and value
as @code{%y}, except that if the ISO week number (see @code{%V}) belongs
to the previous or next year, that year is used instead.

This format was first standardized by @w{ISO C99} and by POSIX.1-2001.

@item %G
The year corresponding to the ISO week number.  This has the same format
and value as @code{%Y}, except that if the ISO week number (see
@code{%V}) belongs to the previous or next year, that year is used
instead.

This format was first standardized by @w{ISO C99} and by POSIX.1-2001
but was previously available as a GNU extension.

@item %h
The abbreviated month name according to the current locale.  The action
is the same as for @code{%b}.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %H
The hour as a decimal number, using a 24-hour clock (range @code{00} through
@code{23}).

@item %I
The hour as a decimal number, using a 12-hour clock (range @code{01} through
@code{12}).

@item %j
The day of the year as a decimal number (range @code{001} through @code{366}).

@item %k
The hour as a decimal number, using a 24-hour clock like @code{%H}, but
padded with blank (range @code{ 0} through @code{23}).

This format is a GNU extension.

@item %l
The hour as a decimal number, using a 12-hour clock like @code{%I}, but
padded with blank (range @code{ 1} through @code{12}).

This format is a GNU extension.

@item %m
The month as a decimal number (range @code{01} through @code{12}).

@item %M
The minute as a decimal number (range @code{00} through @code{59}).

@item %n
A single @samp{\n} (newline) character.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %p
Either @samp{AM} or @samp{PM}, according to the given time value; or the
corresponding strings for the current locale.  Noon is treated as
@samp{PM} and midnight as @samp{AM}.  In most locales
@samp{AM}/@samp{PM} format is not supported, in such cases @code{"%p"}
yields an empty string.

@ignore
We currently have a problem with makeinfo.  Write @samp{AM} and @samp{am}
both results in `am'.  I.e., the difference in case is not visible anymore.
@end ignore
@item %P
Either @samp{am} or @samp{pm}, according to the given time value; or the
corresponding strings for the current locale, printed in lowercase
characters.  Noon is treated as @samp{pm} and midnight as @samp{am}.  In
most locales @samp{AM}/@samp{PM} format is not supported, in such cases
@code{"%P"} yields an empty string.

This format is a GNU extension.

@item %r
The complete calendar time using the AM/PM format of the current locale.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.
In the POSIX locale, this format is equivalent to @code{%I:%M:%S %p}.

@item %R
The hour and minute in decimal numbers using the format @code{%H:%M}.

This format was first standardized by @w{ISO C99} and by POSIX.1-2001
but was previously available as a GNU extension.

@item %s
The number of seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC.
Leap seconds are not counted unless leap second support is available.

This format is a GNU extension.

@item %S
The seconds as a decimal number (range @code{00} through @code{60}).

@item %t
A single @samp{\t} (tabulator) character.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %T
The time of day using decimal numbers using the format @code{%H:%M:%S}.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %u
The day of the week as a decimal number (range @code{1} through
@code{7}), Monday being @code{1}.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %U
The week number of the current year as a decimal number (range @code{00}
through @code{53}), starting with the first Sunday as the first day of
the first week.  Days preceding the first Sunday in the year are
considered to be in week @code{00}.

@item %V
The @w{ISO 8601:1988} week number as a decimal number (range @code{01}
through @code{53}).  ISO weeks start with Monday and end with Sunday.
Week @code{01} of a year is the first week which has the majority of its
days in that year; this is equivalent to the week containing the year's
first Thursday, and it is also equivalent to the week containing January
4.  Week @code{01} of a year can contain days from the previous year.
The week before week @code{01} of a year is the last week (@code{52} or
@code{53}) of the previous year even if it contains days from the new
year.

This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.

@item %w
The day of the week as a decimal number (range @code{0} through
@code{6}), Sunday being @code{0}.

@item %W
The week number of the current year as a decimal number (range @code{00}
through @code{53}), starting with the first Monday as the first day of
the first week.  All days preceding the first Monday in the year are
considered to be in week @code{00}.

@item %x
The preferred date representation for the current locale.

@item %X
The preferred time of day representation for the current locale.

@item %y
The year without a century as a decimal number (range @code{00} through
@code{99}).  This is equivalent to the year modulo 100.

@item %Y
The year as a decimal number, using the Gregorian calendar.  Years
before the year @code{1} are numbered @code{0}, @code{-1}, and so on.

@item %z
@w{RFC 822}/@w{ISO 8601:1988} style numeric time zone (e.g.,
@code{-0600} or @code{+0100}), or nothing if no time zone is
determinable.

This format was first standardized by @w{ISO C99} and by POSIX.1-2001
but was previously available as a GNU extension.

In the POSIX locale, a full @w{RFC 822} timestamp is generated by the format
@w{@samp{"%a, %d %b %Y %H:%M:%S %z"}} (or the equivalent
@w{@samp{"%a, %d %b %Y %T %z"}}).

@item %Z
The time zone abbreviation (empty if the time zone can't be determined).

@item %%
A literal @samp{%} character.
@end table

The @var{size} parameter can be used to specify the maximum number of
characters to be stored in the array @var{s}, including the terminating
null character.  If the formatted time requires more than @var{size}
characters, @code{strftime} returns zero and the contents of the array
@var{s} are undefined.  Otherwise the return value indicates the
number of characters placed in the array @var{s}, not including the
terminating null character.

@emph{Warning:} This convention for the return value which is prescribed
in @w{ISO C} can lead to problems in some situations.  For certain
format strings and certain locales the output really can be the empty
string and this cannot be discovered by testing the return value only.
E.g., in most locales the AM/PM time format is not supported (most of
the world uses the 24 hour time representation).  In such locales
@code{"%p"} will return the empty string, i.e., the return value is
zero.  To detect situations like this something similar to the following
code should be used:

@smallexample
buf[0] = '\1';
len = strftime (buf, bufsize, format, tp);
if (len == 0 && buf[0] != '\0')
  @{
    /* Something went wrong in the strftime call.  */
    @dots{}
  @}
@end smallexample

If @var{s} is a null pointer, @code{strftime} does not actually write
anything, but instead returns the number of characters it would have written.

Calling @code{strftime} also sets the current time zone as if
@code{tzset} were called; @code{strftime} uses this information
instead of @var{brokentime}'s @code{tm_gmtoff} and @code{tm_zone}
members.  @xref{Time Zone Functions}.

For an example of @code{strftime}, see @ref{Time Functions Example}.
@end deftypefun

@comment time.h
@comment ISO/Amend1
@deftypefun size_t wcsftime (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, const struct tm *@var{brokentime})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
@c wcsftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c  wcsftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c   wcsftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c    add ok
@c     memset_zero dup ok
@c     memset_space dup ok
@c    wcslen dup ok
@c    cpy ok
@c     add dup ok
@c     memcpy_lowcase ok
@c      TOLOWER ok
@c       towlower_l dup ok
@c     memcpy_uppcase ok
@c      TOUPPER ok
@c       towupper_l dup ok
@c     MEMCPY ok
@c      wmemcpy dup ok
@c    widen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c     memset dup ok
@c     mbsrtowcs_l @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps]
@c    ISDIGIT ok
@c    STRLEN ok
@c     wcslen dup ok
@c    wcsftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
@c    TOUPPER dup ok
@c    nl_get_era_entry dup @ascuheap @asulock @acsmem @aculock
@c    DO_NUMBER ok
@c    DO_NUMBER_SPACEPAD ok
@c    nl_get_walt_digit dup @ascuheap @asulock @acsmem @aculock
@c     libc_rwlock_wrlock dup @asulock @aculock
@c     nl_init_alt_digit dup @ascuheap @acsmem
@c     malloc dup @ascuheap @acsmem
@c     memset dup ok
@c     wcschr dup ok
@c     libc_rwlock_unlock dup @aculock
@c    memset_space ok
@c     wmemset dup ok
@c    memset_zero ok
@c     wmemset dup ok
@c    mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    iso_week_days ok
@c    isleap ok
@c    tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    tm_diff ok
The @code{wcsftime} function is equivalent to the @code{strftime}
function with the difference that it operates on wide character
strings.  The buffer where the result is stored, pointed to by @var{s},
must be an array of wide characters.  The parameter @var{size} which
specifies the size of the output buffer gives the number of wide
character, not the number of bytes.

Also the format string @var{template} is a wide character string.  Since
all characters needed to specify the format string are in the basic
character set it is portably possible to write format strings in the C
source code using the @code{L"@dots{}"} notation.  The parameter
@var{brokentime} has the same meaning as in the @code{strftime} call.

The @code{wcsftime} function supports the same flags, modifiers, and
format specifiers as the @code{strftime} function.

The return value of @code{wcsftime} is the number of wide characters
stored in @code{s}.  When more characters would have to be written than
can be placed in the buffer @var{s} the return value is zero, with the
same problems indicated in the @code{strftime} documentation.
@end deftypefun

@node Parsing Date and Time
@subsection Convert textual time and date information back

The @w{ISO C} standard does not specify any functions which can convert
the output of the @code{strftime} function back into a binary format.
This led to a variety of more-or-less successful implementations with
different interfaces over the years.  Then the Unix standard was
extended by the addition of two functions: @code{strptime} and
@code{getdate}.  Both have strange interfaces but at least they are
widely available.

@menu
* Low-Level Time String Parsing::  Interpret string according to given format.
* General Time String Parsing::    User-friendly function to parse data and
                                    time strings.
@end menu

@node Low-Level Time String Parsing
@subsubsection Interpret string according to given format

The first function is rather low-level.  It is nevertheless frequently
used in software since it is better known.  Its interface and
implementation are heavily influenced by the @code{getdate} function,
which is defined and implemented in terms of calls to @code{strptime}.

@comment time.h
@comment XPG4
@deftypefun {char *} strptime (const char *@var{s}, const char *@var{fmt}, struct tm *@var{tp})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c strptime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  strptime_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   memset dup ok
@c   ISSPACE ok
@c    isspace_l dup ok
@c   match_char ok
@c   match_string ok
@c    strlen dup ok
@c    strncasecmp_l dup ok
@c   strcmp dup ok
@c   recursive @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c    strptime_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   get_number ok
@c    ISSPACE dup ok
@c   localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   nl_select_era_entry @ascuheap @asulock @acsmem @aculock
@c    nl_init_era_entries dup @ascuheap @asulock @acsmem @aculock
@c   get_alt_number dup @ascuheap @asulock @acsmem @aculock
@c    nl_parse_alt_digit dup @ascuheap @asulock @acsmem @aculock
@c     libc_rwlock_wrlock dup @asulock @aculock
@c     nl_init_alt_digit dup @ascuheap @acsmem
@c     libc_rwlock_unlock dup @aculock
@c    get_number dup ok
@c   day_of_the_week ok
@c   day_of_the_year ok
The @code{strptime} function parses the input string @var{s} according
to the format string @var{fmt} and stores its results in the
structure @var{tp}.

The input string could be generated by a @code{strftime} call or
obtained any other way.  It does not need to be in a human-recognizable
format; e.g. a date passed as @code{"02:1999:9"} is acceptable, even
though it is ambiguous without context.  As long as the format string
@var{fmt} matches the input string the function will succeed.

The user has to make sure, though, that the input can be parsed in a
unambiguous way.  The string @code{"1999112"} can be parsed using the
format @code{"%Y%m%d"} as 1999-1-12, 1999-11-2, or even 19991-1-2.  It
is necessary to add appropriate separators to reliably get results.

The format string consists of the same components as the format string
of the @code{strftime} function.  The only difference is that the flags
@code{_}, @code{-}, @code{0}, and @code{^} are not allowed.
@comment Is this really the intention?  --drepper
Several of the distinct formats of @code{strftime} do the same work in
@code{strptime} since differences like case of the input do not matter.
For reasons of symmetry all formats are supported, though.

The modifiers @code{E} and @code{O} are also allowed everywhere the
@code{strftime} function allows them.

The formats are:

@table @code
@item %a
@itemx %A
The weekday name according to the current locale, in abbreviated form or
the full name.

@item %b
@itemx %B
@itemx %h
The month name according to the current locale, in abbreviated form or
the full name.

@item %c
The date and time representation for the current locale.

@item %Ec
Like @code{%c} but the locale's alternative date and time format is used.

@item %C
The century of the year.

It makes sense to use this format only if the format string also
contains the @code{%y} format.

@item %EC
The locale's representation of the period.

Unlike @code{%C} it sometimes makes sense to use this format since some
cultures represent years relative to the beginning of eras instead of
using the Gregorian years.

@item %d
@item %e
The day of the month as a decimal number (range @code{1} through @code{31}).
Leading zeroes are permitted but not required.

@item %Od
@itemx %Oe
Same as @code{%d} but using the locale's alternative numeric symbols.

Leading zeroes are permitted but not required.

@item %D
Equivalent to @code{%m/%d/%y}.

@item %F
Equivalent to @code{%Y-%m-%d}, which is the @w{ISO 8601} date
format.

This is a GNU extension following an @w{ISO C99} extension to
@code{strftime}.

@item %g
The year corresponding to the ISO week number, but without the century
(range @code{00} through @code{99}).

@emph{Note:} Currently, this is not fully implemented.  The format is
recognized, input is consumed but no field in @var{tm} is set.

This format is a GNU extension following a GNU extension of @code{strftime}.

@item %G
The year corresponding to the ISO week number.

@emph{Note:} Currently, this is not fully implemented.  The format is
recognized, input is consumed but no field in @var{tm} is set.

This format is a GNU extension following a GNU extension of @code{strftime}.

@item %H
@itemx %k
The hour as a decimal number, using a 24-hour clock (range @code{00} through
@code{23}).

@code{%k} is a GNU extension following a GNU extension of @code{strftime}.

@item %OH
Same as @code{%H} but using the locale's alternative numeric symbols.

@item %I
@itemx %l
The hour as a decimal number, using a 12-hour clock (range @code{01} through
@code{12}).

@code{%l} is a GNU extension following a GNU extension of @code{strftime}.

@item %OI
Same as @code{%I} but using the locale's alternative numeric symbols.

@item %j
The day of the year as a decimal number (range @code{1} through @code{366}).

Leading zeroes are permitted but not required.

@item %m
The month as a decimal number (range @code{1} through @code{12}).

Leading zeroes are permitted but not required.

@item %Om
Same as @code{%m} but using the locale's alternative numeric symbols.

@item %M
The minute as a decimal number (range @code{0} through @code{59}).

Leading zeroes are permitted but not required.

@item %OM
Same as @code{%M} but using the locale's alternative numeric symbols.

@item %n
@itemx %t
Matches any white space.

@item %p
@item %P
The locale-dependent equivalent to @samp{AM} or @samp{PM}.

This format is not useful unless @code{%I} or @code{%l} is also used.
Another complication is that the locale might not define these values at
all and therefore the conversion fails.

@code{%P} is a GNU extension following a GNU extension to @code{strftime}.

@item %r
The complete time using the AM/PM format of the current locale.

A complication is that the locale might not define this format at all
and therefore the conversion fails.

@item %R
The hour and minute in decimal numbers using the format @code{%H:%M}.

@code{%R} is a GNU extension following a GNU extension to @code{strftime}.

@item %s
The number of seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC.
Leap seconds are not counted unless leap second support is available.

@code{%s} is a GNU extension following a GNU extension to @code{strftime}.

@item %S
The seconds as a decimal number (range @code{0} through @code{60}).

Leading zeroes are permitted but not required.

@strong{NB:} The Unix specification says the upper bound on this value
is @code{61}, a result of a decision to allow double leap seconds.  You
will not see the value @code{61} because no minute has more than one
leap second, but the myth persists.

@item %OS
Same as @code{%S} but using the locale's alternative numeric symbols.

@item %T
Equivalent to the use of @code{%H:%M:%S} in this place.

@item %u
The day of the week as a decimal number (range @code{1} through
@code{7}), Monday being @code{1}.

Leading zeroes are permitted but not required.

@emph{Note:} Currently, this is not fully implemented.  The format is
recognized, input is consumed but no field in @var{tm} is set.

@item %U
The week number of the current year as a decimal number (range @code{0}
through @code{53}).

Leading zeroes are permitted but not required.

@item %OU
Same as @code{%U} but using the locale's alternative numeric symbols.

@item %V
The @w{ISO 8601:1988} week number as a decimal number (range @code{1}
through @code{53}).

Leading zeroes are permitted but not required.

@emph{Note:} Currently, this is not fully implemented.  The format is
recognized, input is consumed but no field in @var{tm} is set.

@item %w
The day of the week as a decimal number (range @code{0} through
@code{6}), Sunday being @code{0}.

Leading zeroes are permitted but not required.

@emph{Note:} Currently, this is not fully implemented.  The format is
recognized, input is consumed but no field in @var{tm} is set.

@item %Ow
Same as @code{%w} but using the locale's alternative numeric symbols.

@item %W
The week number of the current year as a decimal number (range @code{0}
through @code{53}).

Leading zeroes are permitted but not required.

@emph{Note:} Currently, this is not fully implemented.  The format is
recognized, input is consumed but no field in @var{tm} is set.

@item %OW
Same as @code{%W} but using the locale's alternative numeric symbols.

@item %x
The date using the locale's date format.

@item %Ex
Like @code{%x} but the locale's alternative data representation is used.

@item %X
The time using the locale's time format.

@item %EX
Like @code{%X} but the locale's alternative time representation is used.

@item %y
The year without a century as a decimal number (range @code{0} through
@code{99}).

Leading zeroes are permitted but not required.

Note that it is questionable to use this format without
the @code{%C} format.  The @code{strptime} function does regard input
values in the range @math{68} to @math{99} as the years @math{1969} to
@math{1999} and the values @math{0} to @math{68} as the years
@math{2000} to @math{2068}.  But maybe this heuristic fails for some
input data.

Therefore it is best to avoid @code{%y} completely and use @code{%Y}
instead.

@item %Ey
The offset from @code{%EC} in the locale's alternative representation.

@item %Oy
The offset of the year (from @code{%C}) using the locale's alternative
numeric symbols.

@item %Y
The year as a decimal number, using the Gregorian calendar.

@item %EY
The full alternative year representation.

@item %z
The offset from GMT in @w{ISO 8601}/RFC822 format.

@item %Z
The timezone name.

@emph{Note:} Currently, this is not fully implemented.  The format is
recognized, input is consumed but no field in @var{tm} is set.

@item %%
A literal @samp{%} character.
@end table

All other characters in the format string must have a matching character
in the input string.  Exceptions are white spaces in the input string
which can match zero or more whitespace characters in the format string.

@strong{Portability Note:} The XPG standard advises applications to use
at least one whitespace character (as specified by @code{isspace}) or
other non-alphanumeric characters between any two conversion
specifications.  @Theglibc{} does not have this limitation but
other libraries might have trouble parsing formats like
@code{"%d%m%Y%H%M%S"}.

The @code{strptime} function processes the input string from right to
left.  Each of the three possible input elements (white space, literal,
or format) are handled one after the other.  If the input cannot be
matched to the format string the function stops.  The remainder of the
format and input strings are not processed.

The function returns a pointer to the first character it was unable to
process.  If the input string contains more characters than required by
the format string the return value points right after the last consumed
input character.  If the whole input string is consumed the return value
points to the @code{NULL} byte at the end of the string.  If an error
occurs, i.e., @code{strptime} fails to match all of the format string,
the function returns @code{NULL}.
@end deftypefun

The specification of the function in the XPG standard is rather vague,
leaving out a few important pieces of information.  Most importantly, it
does not specify what happens to those elements of @var{tm} which are
not directly initialized by the different formats.  The
implementations on different Unix systems vary here.

The @glibcadj{} implementation does not touch those fields which are not
directly initialized.  Exceptions are the @code{tm_wday} and
@code{tm_yday} elements, which are recomputed if any of the year, month,
or date elements changed.  This has two implications:

@itemize @bullet
@item
Before calling the @code{strptime} function for a new input string, you
should prepare the @var{tm} structure you pass.  Normally this will mean
initializing all values are to zero.  Alternatively, you can set all
fields to values like @code{INT_MAX}, allowing you to determine which
elements were set by the function call.  Zero does not work here since
it is a valid value for many of the fields.

Careful initialization is necessary if you want to find out whether a
certain field in @var{tm} was initialized by the function call.

@item
You can construct a @code{struct tm} value with several consecutive
@code{strptime} calls.  A useful application of this is e.g. the parsing
of two separate strings, one containing date information and the other
time information.  By parsing one after the other without clearing the
structure in-between, you can construct a complete broken-down time.
@end itemize

The following example shows a function which parses a string which is
contains the date information in either US style or @w{ISO 8601} form:

@smallexample
const char *
parse_date (const char *input, struct tm *tm)
@{
  const char *cp;

  /* @r{First clear the result structure.}  */
  memset (tm, '\0', sizeof (*tm));

  /* @r{Try the ISO format first.}  */
  cp = strptime (input, "%F", tm);
  if (cp == NULL)
    @{
      /* @r{Does not match.  Try the US form.}  */
      cp = strptime (input, "%D", tm);
    @}

  return cp;
@}
@end smallexample

@node General Time String Parsing
@subsubsection A More User-friendly Way to Parse Times and Dates

The Unix standard defines another function for parsing date strings.
The interface is weird, but if the function happens to suit your
application it is just fine.  It is problematic to use this function
in multi-threaded programs or libraries, since it returns a pointer to
a static variable, and uses a global variable and global state (an
environment variable).

@comment time.h
@comment Unix98
@defvar getdate_err
This variable of type @code{int} contains the error code of the last
unsuccessful call to @code{getdate}.  Defined values are:

@table @math
@item 1
The environment variable @code{DATEMSK} is not defined or null.
@item 2
The template file denoted by the @code{DATEMSK} environment variable
cannot be opened.
@item 3
Information about the template file cannot retrieved.
@item 4
The template file is not a regular file.
@item 5
An I/O error occurred while reading the template file.
@item 6
Not enough memory available to execute the function.
@item 7
The template file contains no matching template.
@item 8
The input date is invalid, but would match a template otherwise.  This
includes dates like February 31st, and dates which cannot be represented
in a @code{time_t} variable.
@end table
@end defvar

@comment time.h
@comment Unix98
@deftypefun {struct tm *} getdate (const char *@var{string})
@safety{@prelim{}@mtunsafe{@mtasurace{:getdate} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c getdate @mtasurace:getdate @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  getdate_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
The interface to @code{getdate} is the simplest possible for a function
to parse a string and return the value.  @var{string} is the input
string and the result is returned in a statically-allocated variable.

The details about how the string is processed are hidden from the user.
In fact, they can be outside the control of the program.  Which formats
are recognized is controlled by the file named by the environment
variable @code{DATEMSK}.  This file should contain
lines of valid format strings which could be passed to @code{strptime}.

The @code{getdate} function reads these format strings one after the
other and tries to match the input string.  The first line which
completely matches the input string is used.

Elements not initialized through the format string retain the values
present at the time of the @code{getdate} function call.

The formats recognized by @code{getdate} are the same as for
@code{strptime}.  See above for an explanation.  There are only a few
extensions to the @code{strptime} behavior:

@itemize @bullet
@item
If the @code{%Z} format is given the broken-down time is based on the
current time of the timezone matched, not of the current timezone of the
runtime environment.

@emph{Note}: This is not implemented (currently).  The problem is that
timezone names are not unique.  If a fixed timezone is assumed for a
given string (say @code{EST} meaning US East Coast time), then uses for
countries other than the USA will fail.  So far we have found no good
solution to this.

@item
If only the weekday is specified the selected day depends on the current
date.  If the current weekday is greater or equal to the @code{tm_wday}
value the current week's day is chosen, otherwise the day next week is chosen.

@item
A similar heuristic is used when only the month is given and not the
year.  If the month is greater than or equal to the current month, then
the current year is used.  Otherwise it wraps to next year.  The first
day of the month is assumed if one is not explicitly specified.

@item
The current hour, minute, and second are used if the appropriate value is
not set through the format.

@item
If no date is given tomorrow's date is used if the time is
smaller than the current time.  Otherwise today's date is taken.
@end itemize

It should be noted that the format in the template file need not only
contain format elements.  The following is a list of possible format
strings (taken from the Unix standard):

@smallexample
%m
%A %B %d, %Y %H:%M:%S
%A
%B
%m/%d/%y %I %p
%d,%m,%Y %H:%M
at %A the %dst of %B in %Y
run job at %I %p,%B %dnd
%A den %d. %B %Y %H.%M Uhr
@end smallexample

As you can see, the template list can contain very specific strings like
@code{run job at %I %p,%B %dnd}.  Using the above list of templates and
assuming the current time is Mon Sep 22 12:19:47 EDT 1986 we can obtain the
following results for the given input.

@multitable {xxxxxxxxxxxx} {xxxxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
@item        Input @tab     Match @tab Result
@item        Mon @tab       %a @tab    Mon Sep 22 12:19:47 EDT 1986
@item        Sun @tab       %a @tab    Sun Sep 28 12:19:47 EDT 1986
@item        Fri @tab       %a @tab    Fri Sep 26 12:19:47 EDT 1986
@item        September @tab %B @tab    Mon Sep 1 12:19:47 EDT 1986
@item        January @tab   %B @tab    Thu Jan 1 12:19:47 EST 1987
@item        December @tab  %B @tab    Mon Dec 1 12:19:47 EST 1986
@item        Sep Mon @tab   %b %a @tab Mon Sep 1 12:19:47 EDT 1986
@item        Jan Fri @tab   %b %a @tab Fri Jan 2 12:19:47 EST 1987
@item        Dec Mon @tab   %b %a @tab Mon Dec 1 12:19:47 EST 1986
@item        Jan Wed 1989 @tab  %b %a %Y @tab Wed Jan 4 12:19:47 EST 1989
@item        Fri 9 @tab     %a %H @tab Fri Sep 26 09:00:00 EDT 1986
@item        Feb 10:30 @tab %b %H:%S @tab Sun Feb 1 10:00:30 EST 1987
@item        10:30 @tab     %H:%M @tab Tue Sep 23 10:30:00 EDT 1986
@item        13:30 @tab     %H:%M @tab Mon Sep 22 13:30:00 EDT 1986
@end multitable

The return value of the function is a pointer to a static variable of
type @w{@code{struct tm}}, or a null pointer if an error occurred.  The
result is only valid until the next @code{getdate} call, making this
function unusable in multi-threaded applications.

The @code{errno} variable is @emph{not} changed.  Error conditions are
stored in the global variable @code{getdate_err}.  See the
description above for a list of the possible error values.

@emph{Warning:} The @code{getdate} function should @emph{never} be
used in SUID-programs.  The reason is obvious: using the
@code{DATEMSK} environment variable you can get the function to open
any arbitrary file and chances are high that with some bogus input
(such as a binary file) the program will crash.
@end deftypefun

@comment time.h
@comment GNU
@deftypefun int getdate_r (const char *@var{string}, struct tm *@var{tp})
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c getdate_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  getenv dup @mtsenv
@c  stat64 dup ok
@c  access dup ok
@c  fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
@c  fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive]
@c  isspace dup @mtslocale
@c  strlen dup ok
@c  malloc dup @ascuheap @acsmem
@c  fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
@c  memcpy dup ok
@c  getline dup @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt, exclusive]
@c  strptime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  feof_unlocked dup ok
@c  free dup @ascuheap @acsmem
@c  ferror_unlocked dup dup ok
@c  time dup ok
@c  localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  first_wday @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c   memset dup ok
@c   mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  check_mday ok
@c  mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
The @code{getdate_r} function is the reentrant counterpart of
@code{getdate}.  It does not use the global variable @code{getdate_err}
to signal an error, but instead returns an error code.  The same error
codes as described in the @code{getdate_err} documentation above are
used, with 0 meaning success.

Moreover, @code{getdate_r} stores the broken-down time in the variable
of type @code{struct tm} pointed to by the second argument, rather than
in a static variable.

This function is not defined in the Unix standard.  Nevertheless it is
available on some other Unix systems as well.

The warning against using @code{getdate} in SUID-programs applies to
@code{getdate_r} as well.
@end deftypefun

@node TZ Variable
@subsection Specifying the Time Zone with @code{TZ}

In POSIX systems, a user can specify the time zone by means of the
@code{TZ} environment variable.  For information about how to set
environment variables, see @ref{Environment Variables}.  The functions
for accessing the time zone are declared in @file{time.h}.
@pindex time.h
@cindex time zone

You should not normally need to set @code{TZ}.  If the system is
configured properly, the default time zone will be correct.  You might
set @code{TZ} if you are using a computer over a network from a
different time zone, and would like times reported to you in the time
zone local to you, rather than what is local to the computer.

In POSIX.1 systems the value of the @code{TZ} variable can be in one of
three formats.  With @theglibc{}, the most common format is the
last one, which can specify a selection from a large database of time
zone information for many regions of the world.  The first two formats
are used to describe the time zone information directly, which is both
more cumbersome and less precise.  But the POSIX.1 standard only
specifies the details of the first two formats, so it is good to be
familiar with them in case you come across a POSIX.1 system that doesn't
support a time zone information database.

The first format is used when there is no Daylight Saving Time (or
summer time) in the local time zone:

@smallexample
@r{@var{std} @var{offset}}
@end smallexample

The @var{std} string specifies the name of the time zone.  It must be
three or more characters long and must not contain a leading colon,
embedded digits, commas, nor plus and minus signs.  There is no space
character separating the time zone name from the @var{offset}, so these
restrictions are necessary to parse the specification correctly.

The @var{offset} specifies the time value you must add to the local time
to get a Coordinated Universal Time value.  It has syntax like
[@code{+}|@code{-}]@var{hh}[@code{:}@var{mm}[@code{:}@var{ss}]].  This
is positive if the local time zone is west of the Prime Meridian and
negative if it is east.  The hour must be between @code{0} and
@code{24}, and the minute and seconds between @code{0} and @code{59}.

For example, here is how we would specify Eastern Standard Time, but
without any Daylight Saving Time alternative:

@smallexample
EST+5
@end smallexample

The second format is used when there is Daylight Saving Time:

@smallexample
@r{@var{std} @var{offset} @var{dst} [@var{offset}]@code{,}@var{start}[@code{/}@var{time}]@code{,}@var{end}[@code{/}@var{time}]}
@end smallexample

The initial @var{std} and @var{offset} specify the standard time zone, as
described above.  The @var{dst} string and @var{offset} specify the name
and offset for the corresponding Daylight Saving Time zone; if the
@var{offset} is omitted, it defaults to one hour ahead of standard time.

The remainder of the specification describes when Daylight Saving Time is
in effect.  The @var{start} field is when Daylight Saving Time goes into
effect and the @var{end} field is when the change is made back to standard
time.  The following formats are recognized for these fields:

@table @code
@item J@var{n}
This specifies the Julian day, with @var{n} between @code{1} and @code{365}.
February 29 is never counted, even in leap years.

@item @var{n}
This specifies the Julian day, with @var{n} between @code{0} and @code{365}.
February 29 is counted in leap years.

@item M@var{m}.@var{w}.@var{d}
This specifies day @var{d} of week @var{w} of month @var{m}.  The day
@var{d} must be between @code{0} (Sunday) and @code{6}.  The week
@var{w} must be between @code{1} and @code{5}; week @code{1} is the
first week in which day @var{d} occurs, and week @code{5} specifies the
@emph{last} @var{d} day in the month.  The month @var{m} should be
between @code{1} and @code{12}.
@end table

The @var{time} fields specify when, in the local time currently in
effect, the change to the other time occurs.  If omitted, the default is
@code{02:00:00}.  The hours part of the time fields can range from
@minus{}167 through 167; this is an extension to POSIX.1, which allows
only the range 0 through 24.

Here are some example @code{TZ} values, including the appropriate
Daylight Saving Time and its dates of applicability.  In North
American Eastern Standard Time (EST) and Eastern Daylight Time (EDT),
the normal offset from UTC is 5 hours; since this is
west of the prime meridian, the sign is positive.  Summer time begins on
March's second Sunday at 2:00am, and ends on November's first Sunday
at 2:00am.

@smallexample
EST+5EDT,M3.2.0/2,M11.1.0/2
@end smallexample

Israel Standard Time (IST) and Israel Daylight Time (IDT) are 2 hours
ahead of the prime meridian in winter, springing forward an hour on
March's fourth Tuesday at 26:00 (i.e., 02:00 on the first Friday on or
after March 23), and falling back on October's last Sunday at 02:00.

@smallexample
IST-2IDT,M3.4.4/26,M10.5.0
@end smallexample

Western Argentina Summer Time (WARST) is 3 hours behind the prime
meridian all year.  There is a dummy fall-back transition on December
31 at 25:00 daylight saving time (i.e., 24:00 standard time,
equivalent to January 1 at 00:00 standard time), and a simultaneous
spring-forward transition on January 1 at 00:00 standard time, so
daylight saving time is in effect all year and the initial @code{WART}
is a placeholder.

@smallexample
WART4WARST,J1/0,J365/25
@end smallexample

Western Greenland Time (WGT) and Western Greenland Summer Time (WGST)
are 3 hours behind UTC in the winter.  Its clocks follow the European
Union rules of springing forward by one hour on March's last Sunday at
01:00 UTC (@minus{}02:00 local time) and falling back on October's
last Sunday at 01:00 UTC (@minus{}01:00 local time).

@smallexample
WGT3WGST,M3.5.0/-2,M10.5.0/-1
@end smallexample

The schedule of Daylight Saving Time in any particular jurisdiction has
changed over the years.  To be strictly correct, the conversion of dates
and times in the past should be based on the schedule that was in effect
then.  However, this format has no facilities to let you specify how the
schedule has changed from year to year.  The most you can do is specify
one particular schedule---usually the present day schedule---and this is
used to convert any date, no matter when.  For precise time zone
specifications, it is best to use the time zone information database
(see below).

The third format looks like this:

@smallexample
:@var{characters}
@end smallexample

Each operating system interprets this format differently; in
@theglibc{}, @var{characters} is the name of a file which describes the time
zone.

@pindex /etc/localtime
@pindex localtime
If the @code{TZ} environment variable does not have a value, the
operation chooses a time zone by default.  In @theglibc{}, the
default time zone is like the specification @samp{TZ=:/etc/localtime}
(or @samp{TZ=:/usr/local/etc/localtime}, depending on how @theglibc{}
was configured; @pxref{Installation}).  Other C libraries use their own
rule for choosing the default time zone, so there is little we can say
about them.

@cindex time zone database
@pindex /share/lib/zoneinfo
@pindex zoneinfo
If @var{characters} begins with a slash, it is an absolute file name;
otherwise the library looks for the file
@w{@file{/share/lib/zoneinfo/@var{characters}}}.  The @file{zoneinfo}
directory contains data files describing local time zones in many
different parts of the world.  The names represent major cities, with
subdirectories for geographical areas; for example,
@file{America/New_York}, @file{Europe/London}, @file{Asia/Hong_Kong}.
These data files are installed by the system administrator, who also
sets @file{/etc/localtime} to point to the data file for the local time
zone.  @Theglibc{} comes with a large database of time zone
information for most regions of the world, which is maintained by a
community of volunteers and put in the public domain.

@node Time Zone Functions
@subsection Functions and Variables for Time Zones

@comment time.h
@comment POSIX.1
@deftypevar {char *} tzname [2]
The array @code{tzname} contains two strings, which are the standard
names of the pair of time zones (standard and Daylight
Saving) that the user has selected.  @code{tzname[0]} is the name of
the standard time zone (for example, @code{"EST"}), and @code{tzname[1]}
is the name for the time zone when Daylight Saving Time is in use (for
example, @code{"EDT"}).  These correspond to the @var{std} and @var{dst}
strings (respectively) from the @code{TZ} environment variable.  If
Daylight Saving Time is never used, @code{tzname[1]} is the empty string.

The @code{tzname} array is initialized from the @code{TZ} environment
variable whenever @code{tzset}, @code{ctime}, @code{strftime},
@code{mktime}, or @code{localtime} is called.  If multiple abbreviations
have been used (e.g. @code{"EWT"} and @code{"EDT"} for U.S. Eastern War
Time and Eastern Daylight Time), the array contains the most recent
abbreviation.

The @code{tzname} array is required for POSIX.1 compatibility, but in
GNU programs it is better to use the @code{tm_zone} member of the
broken-down time structure, since @code{tm_zone} reports the correct
abbreviation even when it is not the latest one.

Though the strings are declared as @code{char *} the user must refrain
from modifying these strings.  Modifying the strings will almost certainly
lead to trouble.

@end deftypevar

@comment time.h
@comment POSIX.1
@deftypefun void tzset (void)
@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c tzset @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  libc_lock_lock dup @asulock @aculock
@c  tzset_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
@c  libc_lock_unlock dup @aculock
The @code{tzset} function initializes the @code{tzname} variable from
the value of the @code{TZ} environment variable.  It is not usually
necessary for your program to call this function, because it is called
automatically when you use the other time conversion functions that
depend on the time zone.
@end deftypefun

The following variables are defined for compatibility with System V
Unix.  Like @code{tzname}, these variables are set by calling
@code{tzset} or the other time conversion functions.

@comment time.h
@comment SVID
@deftypevar {long int} timezone
This contains the difference between UTC and the latest local standard
time, in seconds west of UTC.  For example, in the U.S. Eastern time
zone, the value is @code{5*60*60}.  Unlike the @code{tm_gmtoff} member
of the broken-down time structure, this value is not adjusted for
daylight saving, and its sign is reversed.  In GNU programs it is better
to use @code{tm_gmtoff}, since it contains the correct offset even when
it is not the latest one.
@end deftypevar

@comment time.h
@comment SVID
@deftypevar int daylight
This variable has a nonzero value if Daylight Saving Time rules apply.
A nonzero value does not necessarily mean that Daylight Saving Time is
now in effect; it means only that Daylight Saving Time is sometimes in
effect.
@end deftypevar

@node Time Functions Example
@subsection Time Functions Example

Here is an example program showing the use of some of the calendar time
functions.

@smallexample
@include strftim.c.texi
@end smallexample

It produces output like this:

@smallexample
Wed Jul 31 13:02:36 1991
Today is Wednesday, July 31.
The time is 01:02 PM.
@end smallexample


@node Setting an Alarm
@section Setting an Alarm

The @code{alarm} and @code{setitimer} functions provide a mechanism for a
process to interrupt itself in the future.  They do this by setting a
timer; when the timer expires, the process receives a signal.

@cindex setting an alarm
@cindex interval timer, setting
@cindex alarms, setting
@cindex timers, setting
Each process has three independent interval timers available:

@itemize @bullet
@item
A real-time timer that counts elapsed time.  This timer sends a
@code{SIGALRM} signal to the process when it expires.
@cindex real-time timer
@cindex timer, real-time

@item
A virtual timer that counts processor time used by the process.  This timer
sends a @code{SIGVTALRM} signal to the process when it expires.
@cindex virtual timer
@cindex timer, virtual

@item
A profiling timer that counts both processor time used by the process,
and processor time spent in system calls on behalf of the process.  This
timer sends a @code{SIGPROF} signal to the process when it expires.
@cindex profiling timer
@cindex timer, profiling

This timer is useful for profiling in interpreters.  The interval timer
mechanism does not have the fine granularity necessary for profiling
native code.
@c @xref{profil} !!!
@end itemize

You can only have one timer of each kind set at any given time.  If you
set a timer that has not yet expired, that timer is simply reset to the
new value.

You should establish a handler for the appropriate alarm signal using
@code{signal} or @code{sigaction} before issuing a call to
@code{setitimer} or @code{alarm}.  Otherwise, an unusual chain of events
could cause the timer to expire before your program establishes the
handler.  In this case it would be terminated, since termination is the
default action for the alarm signals.  @xref{Signal Handling}.

To be able to use the alarm function to interrupt a system call which
might block otherwise indefinitely it is important to @emph{not} set the
@code{SA_RESTART} flag when registering the signal handler using
@code{sigaction}.  When not using @code{sigaction} things get even
uglier: the @code{signal} function has to fixed semantics with respect
to restarts.  The BSD semantics for this function is to set the flag.
Therefore, if @code{sigaction} for whatever reason cannot be used, it is
necessary to use @code{sysv_signal} and not @code{signal}.

The @code{setitimer} function is the primary means for setting an alarm.
This facility is declared in the header file @file{sys/time.h}.  The
@code{alarm} function, declared in @file{unistd.h}, provides a somewhat
simpler interface for setting the real-time timer.
@pindex unistd.h
@pindex sys/time.h

@comment sys/time.h
@comment BSD
@deftp {Data Type} {struct itimerval}
This structure is used to specify when a timer should expire.  It contains
the following members:
@table @code
@item struct timeval it_interval
This is the period between successive timer interrupts.  If zero, the
alarm will only be sent once.

@item struct timeval it_value
This is the period between now and the first timer interrupt.  If zero,
the alarm is disabled.
@end table

The @code{struct timeval} data type is described in @ref{Elapsed Time}.
@end deftp

@comment sys/time.h
@comment BSD
@deftypefun int setitimer (int @var{which}, const struct itimerval *@var{new}, struct itimerval *@var{old})
@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}}
@c This function is marked with @mtstimer because the same set of timers
@c is shared by all threads of a process, so calling it in one thread
@c may interfere with timers set by another thread.  This interference
@c is not regarded as destructive, because the interface specification
@c makes this overriding while returning the previous value the expected
@c behavior, and the kernel will serialize concurrent calls so that the
@c last one prevails, with each call getting the timer information from
@c the timer installed by the previous call in that serialization.
The @code{setitimer} function sets the timer specified by @var{which}
according to @var{new}.  The @var{which} argument can have a value of
@code{ITIMER_REAL}, @code{ITIMER_VIRTUAL}, or @code{ITIMER_PROF}.

If @var{old} is not a null pointer, @code{setitimer} returns information
about any previous unexpired timer of the same kind in the structure it
points to.

The return value is @code{0} on success and @code{-1} on failure.  The
following @code{errno} error conditions are defined for this function:

@table @code
@item EINVAL
The timer period is too large.
@end table
@end deftypefun

@comment sys/time.h
@comment BSD
@deftypefun int getitimer (int @var{which}, struct itimerval *@var{old})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getitimer} function stores information about the timer specified
by @var{which} in the structure pointed at by @var{old}.

The return value and error conditions are the same as for @code{setitimer}.
@end deftypefun

@comment sys/time.h
@comment BSD
@vtable @code
@item ITIMER_REAL
This constant can be used as the @var{which} argument to the
@code{setitimer} and @code{getitimer} functions to specify the real-time
timer.

@comment sys/time.h
@comment BSD
@item ITIMER_VIRTUAL
This constant can be used as the @var{which} argument to the
@code{setitimer} and @code{getitimer} functions to specify the virtual
timer.

@comment sys/time.h
@comment BSD
@item ITIMER_PROF
This constant can be used as the @var{which} argument to the
@code{setitimer} and @code{getitimer} functions to specify the profiling
timer.
@end vtable

@comment unistd.h
@comment POSIX.1
@deftypefun {unsigned int} alarm (unsigned int @var{seconds})
@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}}
@c Wrapper for setitimer.
The @code{alarm} function sets the real-time timer to expire in
@var{seconds} seconds.  If you want to cancel any existing alarm, you
can do this by calling @code{alarm} with a @var{seconds} argument of
zero.

The return value indicates how many seconds remain before the previous
alarm would have been sent.  If there is no previous alarm, @code{alarm}
returns zero.
@end deftypefun

The @code{alarm} function could be defined in terms of @code{setitimer}
like this:

@smallexample
unsigned int
alarm (unsigned int seconds)
@{
  struct itimerval old, new;
  new.it_interval.tv_usec = 0;
  new.it_interval.tv_sec = 0;
  new.it_value.tv_usec = 0;
  new.it_value.tv_sec = (long int) seconds;
  if (setitimer (ITIMER_REAL, &new, &old) < 0)
    return 0;
  else
    return old.it_value.tv_sec;
@}
@end smallexample

There is an example showing the use of the @code{alarm} function in
@ref{Handler Returns}.

If you simply want your process to wait for a given number of seconds,
you should use the @code{sleep} function.  @xref{Sleeping}.

You shouldn't count on the signal arriving precisely when the timer
expires.  In a multiprocessing environment there is typically some
amount of delay involved.

@strong{Portability Note:} The @code{setitimer} and @code{getitimer}
functions are derived from BSD Unix, while the @code{alarm} function is
specified by the POSIX.1 standard.  @code{setitimer} is more powerful than
@code{alarm}, but @code{alarm} is more widely used.

@node Sleeping
@section Sleeping

The function @code{sleep} gives a simple way to make the program wait
for a short interval.  If your program doesn't use signals (except to
terminate), then you can expect @code{sleep} to wait reliably throughout
the specified interval.  Otherwise, @code{sleep} can return sooner if a
signal arrives; if you want to wait for a given interval regardless of
signals, use @code{select} (@pxref{Waiting for I/O}) and don't specify
any descriptors to wait for.
@c !!! select can get EINTR; using SA_RESTART makes sleep win too.

@comment unistd.h
@comment POSIX.1
@deftypefun {unsigned int} sleep (unsigned int @var{seconds})
@safety{@prelim{}@mtunsafe{@mtascusig{:SIGCHLD/linux}}@asunsafe{}@acunsafe{}}
@c On Mach, it uses ports and calls time.  On generic posix, it calls
@c nanosleep.  On Linux, it temporarily blocks SIGCHLD, which is MT- and
@c AS-Unsafe, and in a way that makes it AC-Unsafe (C-unsafe, even!).
The @code{sleep} function waits for @var{seconds} or until a signal
is delivered, whichever happens first.

If @code{sleep} function returns because the requested interval is over,
it returns a value of zero.  If it returns because of delivery of a
signal, its return value is the remaining time in the sleep interval.

The @code{sleep} function is declared in @file{unistd.h}.
@end deftypefun

Resist the temptation to implement a sleep for a fixed amount of time by
using the return value of @code{sleep}, when nonzero, to call
@code{sleep} again.  This will work with a certain amount of accuracy as
long as signals arrive infrequently.  But each signal can cause the
eventual wakeup time to be off by an additional second or so.  Suppose a
few signals happen to arrive in rapid succession by bad luck---there is
no limit on how much this could shorten or lengthen the wait.

Instead, compute the calendar time at which the program should stop
waiting, and keep trying to wait until that calendar time.  This won't
be off by more than a second.  With just a little more work, you can use
@code{select} and make the waiting period quite accurate.  (Of course,
heavy system load can cause additional unavoidable delays---unless the
machine is dedicated to one application, there is no way you can avoid
this.)

On some systems, @code{sleep} can do strange things if your program uses
@code{SIGALRM} explicitly.  Even if @code{SIGALRM} signals are being
ignored or blocked when @code{sleep} is called, @code{sleep} might
return prematurely on delivery of a @code{SIGALRM} signal.  If you have
established a handler for @code{SIGALRM} signals and a @code{SIGALRM}
signal is delivered while the process is sleeping, the action taken
might be just to cause @code{sleep} to return instead of invoking your
handler.  And, if @code{sleep} is interrupted by delivery of a signal
whose handler requests an alarm or alters the handling of @code{SIGALRM},
this handler and @code{sleep} will interfere.

On @gnusystems{}, it is safe to use @code{sleep} and @code{SIGALRM} in
the same program, because @code{sleep} does not work by means of
@code{SIGALRM}.

@comment time.h
@comment POSIX.1
@deftypefun int nanosleep (const struct timespec *@var{requested_time}, struct timespec *@var{remaining})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c On Linux, it's a syscall.  On Mach, it calls gettimeofday and uses
@c ports.
If resolution to seconds is not enough the @code{nanosleep} function can
be used.  As the name suggests the sleep interval can be specified in
nanoseconds.  The actual elapsed time of the sleep interval might be
longer since the system rounds the elapsed time you request up to the
next integer multiple of the actual resolution the system can deliver.

*@code{requested_time} is the elapsed time of the interval you want to
sleep.

The function returns as *@code{remaining} the elapsed time left in the
interval for which you requested to sleep.  If the interval completed
without getting interrupted by a signal, this is zero.

@code{struct timespec} is described in @xref{Elapsed Time}.

If the function returns because the interval is over the return value is
zero.  If the function returns @math{-1} the global variable @var{errno}
is set to the following values:

@table @code
@item EINTR
The call was interrupted because a signal was delivered to the thread.
If the @var{remaining} parameter is not the null pointer the structure
pointed to by @var{remaining} is updated to contain the remaining
elapsed time.

@item EINVAL
The nanosecond value in the @var{requested_time} parameter contains an
illegal value.  Either the value is negative or greater than or equal to
1000 million.
@end table

This function is a cancellation point in multi-threaded programs.  This
is a problem if the thread allocates some resources (like memory, file
descriptors, semaphores or whatever) at the time @code{nanosleep} is
called.  If the thread gets canceled these resources stay allocated
until the program ends.  To avoid this calls to @code{nanosleep} should
be protected using cancellation handlers.
@c ref pthread_cleanup_push / pthread_cleanup_pop

The @code{nanosleep} function is declared in @file{time.h}.
@end deftypefun
