Update.
[glibc.git] / manual / time.texi
blobff393a2c61d1fd02d6f0ca0c2c014cc612445216
1 @node Date and Time, Non-Local Exits, Arithmetic, Top
2 @c %MENU% Functions for getting the date and time and formatting them nicely
3 @chapter Date and Time
5 This chapter describes functions for manipulating dates and times,
6 including functions for determining what the current time is and
7 conversion between different time representations.
9 The time functions fall into three main categories:
11 @itemize @bullet
12 @item
13 Functions for measuring elapsed CPU time are discussed in @ref{Processor
14 Time}.
16 @item
17 Functions for measuring absolute clock or calendar time are discussed in
18 @ref{Calendar Time}.
20 @item
21 Functions for setting alarms and timers are discussed in @ref{Setting
22 an Alarm}.
23 @end itemize
25 @menu
26 * Processor Time::              Measures processor time used by a program.
27 * Calendar Time::               Manipulation of ``real'' dates and times.
28 * Precision Time::              Manipulation and monitoring of high accuracy
29                                   time.
30 * Setting an Alarm::            Sending a signal after a specified time.
31 * Sleeping::                    Waiting for a period of time.
32 * Resource Usage::              Measuring various resources used.
33 * Limits on Resources::         Specifying limits on resource usage.
34 * Priority::                    Reading or setting process run priority.
35 @end menu
37 @node Processor Time
38 @section Processor Time
40 If you're trying to optimize your program or measure its efficiency, it's
41 very useful to be able to know how much @dfn{processor time} or @dfn{CPU
42 time} it has used at any given point.  Processor time is different from
43 actual wall clock time because it doesn't include any time spent waiting
44 for I/O or when some other process is running.  Processor time is
45 represented by the data type @code{clock_t}, and is given as a number of
46 @dfn{clock ticks} relative to an arbitrary base time marking the beginning
47 of a single program invocation.
48 @cindex CPU time
49 @cindex processor time
50 @cindex clock ticks
51 @cindex ticks, clock
52 @cindex time, elapsed CPU
54 @menu
55 * Basic CPU Time::              The @code{clock} function.
56 * Detailed CPU Time::           The @code{times} function.
57 @end menu
59 @node Basic CPU Time
60 @subsection Basic CPU Time Inquiry
62 To get the elapsed CPU time used by a process, you can use the
63 @code{clock} function.  This facility is declared in the header file
64 @file{time.h}.
65 @pindex time.h
67 In typical usage, you call the @code{clock} function at the beginning and
68 end of the interval you want to time, subtract the values, and then divide
69 by @code{CLOCKS_PER_SEC} (the number of clock ticks per second), like this:
71 @smallexample
72 @group
73 #include <time.h>
75 clock_t start, end;
76 double elapsed;
78 start = clock();
79 @dots{} /* @r{Do the work.} */
80 end = clock();
81 elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
82 @end group
83 @end smallexample
85 Different computers and operating systems vary wildly in how they keep
86 track of processor time.  It's common for the internal processor clock
87 to have a resolution somewhere between hundredth and millionth of a
88 second.
90 In the GNU system, @code{clock_t} is equivalent to @code{long int} and
91 @code{CLOCKS_PER_SEC} is an integer value.  But in other systems, both
92 @code{clock_t} and the type of the macro @code{CLOCKS_PER_SEC} can be
93 either integer or floating-point types.  Casting processor time values
94 to @code{double}, as in the example above, makes sure that operations
95 such as arithmetic and printing work properly and consistently no matter
96 what the underlying representation is.
98 Note that the clock can wrap around.  On a 32bit system with
99 @code{CLOCKS_PER_SEC} set to one million this function will return the
100 same value approximately every 72 minutes.
102 @comment time.h
103 @comment ISO
104 @deftypevr Macro int CLOCKS_PER_SEC
105 The value of this macro is the number of clock ticks per second measured
106 by the @code{clock} function.  POSIX requires that this value is one
107 million independent of the actual resolution.
108 @end deftypevr
110 @comment time.h
111 @comment POSIX.1
112 @deftypevr Macro int CLK_TCK
113 This is an obsolete name for @code{CLOCKS_PER_SEC}.
114 @end deftypevr
116 @comment time.h
117 @comment ISO
118 @deftp {Data Type} clock_t
119 This is the type of the value returned by the @code{clock} function.
120 Values of type @code{clock_t} are in units of clock ticks.
121 @end deftp
123 @comment time.h
124 @comment ISO
125 @deftypefun clock_t clock (void)
126 This function returns the elapsed processor time.  The base time is
127 arbitrary but doesn't change within a single process.  If the processor
128 time is not available or cannot be represented, @code{clock} returns the
129 value @code{(clock_t)(-1)}.
130 @end deftypefun
133 @node Detailed CPU Time
134 @subsection Detailed Elapsed CPU Time Inquiry
136 The @code{times} function returns more detailed information about
137 elapsed processor time in a @w{@code{struct tms}} object.  You should
138 include the header file @file{sys/times.h} to use this facility.
139 @pindex sys/times.h
141 @comment sys/times.h
142 @comment POSIX.1
143 @deftp {Data Type} {struct tms}
144 The @code{tms} structure is used to return information about process
145 times.  It contains at least the following members:
147 @table @code
148 @item clock_t tms_utime
149 This is the CPU time used in executing the instructions of the calling
150 process.
152 @item clock_t tms_stime
153 This is the CPU time used by the system on behalf of the calling process.
155 @item clock_t tms_cutime
156 This is the sum of the @code{tms_utime} values and the @code{tms_cutime}
157 values of all terminated child processes of the calling process, whose
158 status has been reported to the parent process by @code{wait} or
159 @code{waitpid}; see @ref{Process Completion}.  In other words, it
160 represents the total CPU time used in executing the instructions of all
161 the terminated child processes of the calling process, excluding child
162 processes which have not yet been reported by @code{wait} or
163 @code{waitpid}.
165 @item clock_t tms_cstime
166 This is similar to @code{tms_cutime}, but represents the total CPU time
167 used by the system on behalf of all the terminated child processes of the
168 calling process.
169 @end table
171 All of the times are given in clock ticks.  These are absolute values; in a
172 newly created process, they are all zero.  @xref{Creating a Process}.
173 @end deftp
175 @comment sys/times.h
176 @comment POSIX.1
177 @deftypefun clock_t times (struct tms *@var{buffer})
178 The @code{times} function stores the processor time information for
179 the calling process in @var{buffer}.
181 The return value is the same as the value of @code{clock()}: the elapsed
182 real time relative to an arbitrary base.  The base is a constant within a
183 particular process, and typically represents the time since system
184 start-up.  A value of @code{(clock_t)(-1)} is returned to indicate failure.
185 @end deftypefun
187 @strong{Portability Note:} The @code{clock} function described in
188 @ref{Basic CPU Time}, is specified by the @w{ISO C} standard.  The
189 @code{times} function is a feature of POSIX.1.  In the GNU system, the
190 value returned by the @code{clock} function is equivalent to the sum of
191 the @code{tms_utime} and @code{tms_stime} fields returned by
192 @code{times}.
194 @node Calendar Time
195 @section Calendar Time
197 This section describes facilities for keeping track of dates and times
198 according to the Gregorian calendar.
199 @cindex Gregorian calendar
200 @cindex time, calendar
201 @cindex date and time
203 There are three representations for date and time information:
205 @itemize @bullet
206 @item
207 @dfn{Calendar time} (the @code{time_t} data type) is a compact
208 representation, typically giving the number of seconds elapsed since
209 some implementation-specific base time.
210 @cindex calendar time
212 @item
213 There is also a @dfn{high-resolution time} representation (the @code{struct
214 timeval} data type) that includes fractions of a second.  Use this time
215 representation instead of ordinary calendar time when you need greater
216 precision.
217 @cindex high-resolution time
219 @item
220 @dfn{Local time} or @dfn{broken-down time} (the @code{struct
221 tm} data type) represents the date and time as a set of components
222 specifying the year, month, and so on, for a specific time zone.
223 This time representation is usually used in conjunction with formatting
224 date and time values.
225 @cindex local time
226 @cindex broken-down time
227 @end itemize
229 @menu
230 * Simple Calendar Time::        Facilities for manipulating calendar time.
231 * High-Resolution Calendar::    A time representation with greater precision.
232 * Broken-down Time::            Facilities for manipulating local time.
233 * Formatting Date and Time::    Converting times to strings.
234 * Parsing Date and Time::       Convert textual time and date information back
235                                  into broken-down time values.
236 * TZ Variable::                 How users specify the time zone.
237 * Time Zone Functions::         Functions to examine or specify the time zone.
238 * Time Functions Example::      An example program showing use of some of
239                                  the time functions.
240 @end menu
242 @node Simple Calendar Time
243 @subsection Simple Calendar Time
245 This section describes the @code{time_t} data type for representing
246 calendar time, and the functions which operate on calendar time objects.
247 These facilities are declared in the header file @file{time.h}.
248 @pindex time.h
250 @cindex epoch
251 @comment time.h
252 @comment ISO
253 @deftp {Data Type} time_t
254 This is the data type used to represent calendar time.
255 When interpreted as an absolute time
256 value, it represents the number of seconds elapsed since 00:00:00 on
257 January 1, 1970, Coordinated Universal Time.  (This date is sometimes
258 referred to as the @dfn{epoch}.)  POSIX requires that this count
259 ignore leap seconds, but on some hosts this count includes leap seconds
260 if you set @code{TZ} to certain values (@pxref{TZ Variable}).
262 In the GNU C library, @code{time_t} is equivalent to @code{long int}.
263 In other systems, @code{time_t} might be either an integer or
264 floating-point type.
265 @end deftp
267 @comment time.h
268 @comment ISO
269 @deftypefun double difftime (time_t @var{time1}, time_t @var{time0})
270 The @code{difftime} function returns the number of seconds elapsed
271 between time @var{time1} and time @var{time0}, as a value of type
272 @code{double}.  The difference ignores leap seconds unless leap
273 second support is enabled.
275 In the GNU system, you can simply subtract @code{time_t} values.  But on
276 other systems, the @code{time_t} data type might use some other encoding
277 where subtraction doesn't work directly.
278 @end deftypefun
280 @comment time.h
281 @comment ISO
282 @deftypefun time_t time (time_t *@var{result})
283 The @code{time} function returns the current time as a value of type
284 @code{time_t}.  If the argument @var{result} is not a null pointer, the
285 time value is also stored in @code{*@var{result}}.  If the calendar
286 time is not available, the value @w{@code{(time_t)(-1)}} is returned.
287 @end deftypefun
290 @node High-Resolution Calendar
291 @subsection High-Resolution Calendar
293 The @code{time_t} data type used to represent calendar times has a
294 resolution of only one second.  Some applications need more precision.
296 So, the GNU C library also contains functions which are capable of
297 representing calendar times to a higher resolution than one second.  The
298 functions and the associated data types described in this section are
299 declared in @file{sys/time.h}.
300 @pindex sys/time.h
302 @comment sys/time.h
303 @comment BSD
304 @deftp {Data Type} {struct timeval}
305 The @code{struct timeval} structure represents a calendar time.  It
306 has the following members:
308 @table @code
309 @item long int tv_sec
310 This represents the number of seconds since the epoch.  It is equivalent
311 to a normal @code{time_t} value.
313 @item long int tv_usec
314 This is the fractional second value, represented as the number of
315 microseconds.
317 Some times struct timeval values are used for time intervals.  Then the
318 @code{tv_sec} member is the number of seconds in the interval, and
319 @code{tv_usec} is the number of additional microseconds.
320 @end table
321 @end deftp
323 @comment sys/time.h
324 @comment BSD
325 @deftp {Data Type} {struct timezone}
326 The @code{struct timezone} structure is used to hold minimal information
327 about the local time zone.  It has the following members:
329 @table @code
330 @item int tz_minuteswest
331 This is the number of minutes west of UTC.
333 @item int tz_dsttime
334 If nonzero, Daylight Saving Time applies during some part of the year.
335 @end table
337 The @code{struct timezone} type is obsolete and should never be used.
338 Instead, use the facilities described in @ref{Time Zone Functions}.
339 @end deftp
341 It is often necessary to subtract two values of type @w{@code{struct
342 timeval}}.  Here is the best way to do this.  It works even on some
343 peculiar operating systems where the @code{tv_sec} member has an
344 unsigned type.
346 @smallexample
347 /* @r{Subtract the `struct timeval' values X and Y,}
348    @r{storing the result in RESULT.}
349    @r{Return 1 if the difference is negative, otherwise 0.}  */
352 timeval_subtract (result, x, y)
353      struct timeval *result, *x, *y;
355   /* @r{Perform the carry for the later subtraction by updating @var{y}.} */
356   if (x->tv_usec < y->tv_usec) @{
357     int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
358     y->tv_usec -= 1000000 * nsec;
359     y->tv_sec += nsec;
360   @}
361   if (x->tv_usec - y->tv_usec > 1000000) @{
362     int nsec = (x->tv_usec - y->tv_usec) / 1000000;
363     y->tv_usec += 1000000 * nsec;
364     y->tv_sec -= nsec;
365   @}
367   /* @r{Compute the time remaining to wait.}
368      @r{@code{tv_usec} is certainly positive.} */
369   result->tv_sec = x->tv_sec - y->tv_sec;
370   result->tv_usec = x->tv_usec - y->tv_usec;
372   /* @r{Return 1 if result is negative.} */
373   return x->tv_sec < y->tv_sec;
375 @end smallexample
377 @comment sys/time.h
378 @comment BSD
379 @deftypefun int gettimeofday (struct timeval *@var{tp}, struct timezone *@var{tzp})
380 The @code{gettimeofday} function returns the current date and time in the
381 @code{struct timeval} structure indicated by @var{tp}.  Information about the
382 time zone is returned in the structure pointed at @var{tzp}.  If the @var{tzp}
383 argument is a null pointer, time zone information is ignored.
385 The return value is @code{0} on success and @code{-1} on failure.  The
386 following @code{errno} error condition is defined for this function:
388 @table @code
389 @item ENOSYS
390 The operating system does not support getting time zone information, and
391 @var{tzp} is not a null pointer.  The GNU operating system does not
392 support using @w{@code{struct timezone}} to represent time zone
393 information; that is an obsolete feature of 4.3 BSD.
394 Instead, use the facilities described in @ref{Time Zone Functions}.
395 @end table
396 @end deftypefun
398 @comment sys/time.h
399 @comment BSD
400 @deftypefun int settimeofday (const struct timeval *@var{tp}, const struct timezone *@var{tzp})
401 The @code{settimeofday} function sets the current date and time
402 according to the arguments.  As for @code{gettimeofday}, time zone
403 information is ignored if @var{tzp} is a null pointer.
405 You must be a privileged user in order to use @code{settimeofday}.
407 The return value is @code{0} on success and @code{-1} on failure.  The
408 following @code{errno} error conditions are defined for this function:
410 @table @code
411 @item EPERM
412 This process cannot set the time because it is not privileged.
414 @item ENOSYS
415 The operating system does not support setting time zone information, and
416 @var{tzp} is not a null pointer.
417 @end table
418 @end deftypefun
420 @comment sys/time.h
421 @comment BSD
422 @deftypefun int adjtime (const struct timeval *@var{delta}, struct timeval *@var{olddelta})
423 This function speeds up or slows down the system clock in order to make
424 gradual adjustments in the current time.  This ensures that the time
425 reported by the system clock is always monotonically increasing, which
426 might not happen if you simply set the current time.
428 The @var{delta} argument specifies a relative adjustment to be made to
429 the current time.  If negative, the system clock is slowed down for a
430 while until it has lost this much time.  If positive, the system clock
431 is speeded up for a while.
433 If the @var{olddelta} argument is not a null pointer, the @code{adjtime}
434 function returns information about any previous time adjustment that
435 has not yet completed.
437 This function is typically used to synchronize the clocks of computers
438 in a local network.  You must be a privileged user to use it.
439 The return value is @code{0} on success and @code{-1} on failure.  The
440 following @code{errno} error condition is defined for this function:
442 @table @code
443 @item EPERM
444 You do not have privilege to set the time.
445 @end table
446 @end deftypefun
448 @strong{Portability Note:}  The @code{gettimeofday}, @code{settimeofday},
449 and @code{adjtime} functions are derived from BSD.
452 @node Broken-down Time
453 @subsection Broken-down Time
454 @cindex broken-down time
455 @cindex calendar time and broken-down time
457 Calendar time is represented as a number of seconds.  This is convenient
458 for calculation, but has no relation to the way people normally
459 represent dates and times.  By contrast, @dfn{broken-down time} is a binary
460 representation separated into year, month, day, and so on.  Broken-down
461 time values are not useful for calculations, but they are useful for
462 printing human readable time.
464 A broken-down time value is always relative to a choice of local time
465 zone, and it also indicates which time zone was used.
467 The symbols in this section are declared in the header file @file{time.h}.
469 @comment time.h
470 @comment ISO
471 @deftp {Data Type} {struct tm}
472 This is the data type used to represent a broken-down time.  The structure
473 contains at least the following members, which can appear in any order:
475 @table @code
476 @item int tm_sec
477 This is the number of seconds after the minute, normally in the range
478 @code{0} through @code{59}.  (The actual upper limit is @code{60}, to allow
479 for leap seconds if leap second support is available.)
480 @cindex leap second
482 @item int tm_min
483 This is the number of minutes after the hour, in the range @code{0} through
484 @code{59}.
486 @item int tm_hour
487 This is the number of hours past midnight, in the range @code{0} through
488 @code{23}.
490 @item int tm_mday
491 This is the day of the month, in the range @code{1} through @code{31}.
493 @item int tm_mon
494 This is the number of months since January, in the range @code{0} through
495 @code{11}.
497 @item int tm_year
498 This is the number of years since @code{1900}.
500 @item int tm_wday
501 This is the number of days since Sunday, in the range @code{0} through
502 @code{6}.
504 @item int tm_yday
505 This is the number of days since January 1, in the range @code{0} through
506 @code{365}.
508 @item int tm_isdst
509 @cindex Daylight Saving Time
510 @cindex summer time
511 This is a flag that indicates whether Daylight Saving Time is (or was, or
512 will be) in effect at the time described.  The value is positive if
513 Daylight Saving Time is in effect, zero if it is not, and negative if the
514 information is not available.
516 @item long int tm_gmtoff
517 This field describes the time zone that was used to compute this
518 broken-down time value, including any adjustment for daylight saving; it
519 is the number of seconds that you must add to UTC to get local time.
520 You can also think of this as the number of seconds east of UTC.  For
521 example, for U.S. Eastern Standard Time, the value is @code{-5*60*60}.
522 The @code{tm_gmtoff} field is derived from BSD and is a GNU library
523 extension; it is not visible in a strict @w{ISO C} environment.
525 @item const char *tm_zone
526 This field is the name for the time zone that was used to compute this
527 broken-down time value.  Like @code{tm_gmtoff}, this field is a BSD and
528 GNU extension, and is not visible in a strict @w{ISO C} environment.
529 @end table
530 @end deftp
532 @comment time.h
533 @comment ISO
534 @deftypefun {struct tm *} localtime (const time_t *@var{time})
535 The @code{localtime} function converts the calendar time pointed to by
536 @var{time} to broken-down time representation, expressed relative to the
537 user's specified time zone.
539 The return value is a pointer to a static broken-down time structure, which
540 might be overwritten by subsequent calls to @code{ctime}, @code{gmtime},
541 or @code{localtime}.  (But no other library function overwrites the contents
542 of this object.)
544 The return value is the null pointer if @var{time} cannot be represented
545 as a broken-down time; typically this is because the year cannot fit into
546 an @code{int}.
548 Calling @code{localtime} has one other effect: it sets the variable
549 @code{tzname} with information about the current time zone.  @xref{Time
550 Zone Functions}.
551 @end deftypefun
553 Using the @code{localtime} function is a big problem in multi-threaded
554 programs.  The result is returned in a static buffer and this is used in
555 all threads.  POSIX.1c introduced a variant of this function.
557 @comment time.h
558 @comment POSIX.1c
559 @deftypefun {struct tm *} localtime_r (const time_t *@var{time}, struct tm *@var{resultp})
560 The @code{localtime_r} function works just like the @code{localtime}
561 function.  It takes a pointer to a variable containing the calendar time
562 and converts it to the broken-down time format.
564 But the result is not placed in a static buffer.  Instead it is placed
565 in the object of type @code{struct tm} to which the parameter
566 @var{resultp} points.
568 If the conversion is successful the function returns a pointer to the
569 object the result was written into, i.e., it returns @var{resultp}.
570 @end deftypefun
573 @comment time.h
574 @comment ISO
575 @deftypefun {struct tm *} gmtime (const time_t *@var{time})
576 This function is similar to @code{localtime}, except that the broken-down
577 time is expressed as Coordinated Universal Time (UTC)---that is, as
578 Greenwich Mean Time (GMT)---rather than relative to the local time zone.
580 Recall that calendar times are @emph{always} expressed in coordinated
581 universal time.
582 @end deftypefun
584 As for the @code{localtime} function we have the problem that the result
585 is placed in a static variable.  POSIX.1c also provides a replacement for
586 @code{gmtime}.
588 @comment time.h
589 @comment POSIX.1c
590 @deftypefun {struct tm *} gmtime_r (const time_t *@var{time}, struct tm *@var{resultp})
591 This function is similar to @code{localtime_r}, except that it converts
592 just like @code{gmtime} the given time as Coordinated Universal Time.
594 If the conversion is successful the function returns a pointer to the
595 object the result was written into, i.e., it returns @var{resultp}.
596 @end deftypefun
599 @comment time.h
600 @comment ISO
601 @deftypefun time_t mktime (struct tm *@var{brokentime})
602 The @code{mktime} function is used to convert a broken-down time structure
603 to a calendar time representation.  It also ``normalizes'' the contents of
604 the broken-down time structure, by filling in the day of week and day of
605 year based on the other date and time components.
607 The @code{mktime} function ignores the specified contents of the
608 @code{tm_wday} and @code{tm_yday} members of the broken-down time
609 structure.  It uses the values of the other components to compute the
610 calendar time; it's permissible for these components to have
611 unnormalized values outside their normal ranges.  The last thing that
612 @code{mktime} does is adjust the components of the @var{brokentime}
613 structure (including the @code{tm_wday} and @code{tm_yday}).
615 If the specified broken-down time cannot be represented as a calendar time,
616 @code{mktime} returns a value of @code{(time_t)(-1)} and does not modify
617 the contents of @var{brokentime}.
619 Calling @code{mktime} also sets the variable @code{tzname} with
620 information about the current time zone.  @xref{Time Zone Functions}.
621 @end deftypefun
623 @node Formatting Date and Time
624 @subsection Formatting Date and Time
626 The functions described in this section format time values as strings.
627 These functions are declared in the header file @file{time.h}.
628 @pindex time.h
630 @comment time.h
631 @comment ISO
632 @deftypefun {char *} asctime (const struct tm *@var{brokentime})
633 The @code{asctime} function converts the broken-down time value that
634 @var{brokentime} points to into a string in a standard format:
636 @smallexample
637 "Tue May 21 13:46:22 1991\n"
638 @end smallexample
640 The abbreviations for the days of week are: @samp{Sun}, @samp{Mon},
641 @samp{Tue}, @samp{Wed}, @samp{Thu}, @samp{Fri}, and @samp{Sat}.
643 The abbreviations for the months are: @samp{Jan}, @samp{Feb},
644 @samp{Mar}, @samp{Apr}, @samp{May}, @samp{Jun}, @samp{Jul}, @samp{Aug},
645 @samp{Sep}, @samp{Oct}, @samp{Nov}, and @samp{Dec}.
647 The return value points to a statically allocated string, which might be
648 overwritten by subsequent calls to @code{asctime} or @code{ctime}.
649 (But no other library function overwrites the contents of this
650 string.)
651 @end deftypefun
653 @comment time.h
654 @comment POSIX.1c
655 @deftypefun {char *} asctime_r (const struct tm *@var{brokentime}, char *@var{buffer})
656 This function is similar to @code{asctime} but instead of placing the
657 result in a static buffer it writes the string in the buffer pointed to
658 by the parameter @var{buffer}.  This buffer should have room
659 for at least 26 bytes, including the terminating null.
661 If no error occurred the function returns a pointer to the string the
662 result was written into, i.e., it returns @var{buffer}.  Otherwise
663 return @code{NULL}.
664 @end deftypefun
667 @comment time.h
668 @comment ISO
669 @deftypefun {char *} ctime (const time_t *@var{time})
670 The @code{ctime} function is similar to @code{asctime}, except that the
671 time value is specified as a @code{time_t} calendar time value rather
672 than in broken-down local time format.  It is equivalent to
674 @smallexample
675 asctime (localtime (@var{time}))
676 @end smallexample
678 @code{ctime} sets the variable @code{tzname}, because @code{localtime}
679 does so.  @xref{Time Zone Functions}.
680 @end deftypefun
682 @comment time.h
683 @comment POSIX.1c
684 @deftypefun {char *} ctime_r (const time_t *@var{time}, char *@var{buffer})
685 This function is similar to @code{ctime}, only that it places the result
686 in the string pointed to by @var{buffer}.  It is equivalent to (written
687 using gcc extensions, @pxref{Statement Exprs,,,gcc,Porting and Using gcc}):
689 @smallexample
690 (@{ struct tm tm; asctime_r (localtime_r (time, &tm), buf); @})
691 @end smallexample
693 If no error occurred the function returns a pointer to the string the
694 result was written into, i.e., it returns @var{buffer}.  Otherwise
695 return @code{NULL}.
696 @end deftypefun
699 @comment time.h
700 @comment ISO
701 @deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime})
702 This function is similar to the @code{sprintf} function (@pxref{Formatted
703 Input}), but the conversion specifications that can appear in the format
704 template @var{template} are specialized for printing components of the date
705 and time @var{brokentime} according to the locale currently specified for
706 time conversion (@pxref{Locales}).
708 Ordinary characters appearing in the @var{template} are copied to the
709 output string @var{s}; this can include multibyte character sequences.
710 Conversion specifiers are introduced by a @samp{%} character, followed
711 by an optional flag which can be one of the following.  These flags
712 are all GNU extensions. The first three affect only the output of
713 numbers:
715 @table @code
716 @item _
717 The number is padded with spaces.
719 @item -
720 The number is not padded at all.
722 @item 0
723 The number is padded with zeros even if the format specifies padding
724 with spaces.
726 @item ^
727 The output uses uppercase characters, but only if this is possible
728 (@pxref{Case Conversion}).
729 @end table
731 The default action is to pad the number with zeros to keep it a constant
732 width.  Numbers that do not have a range indicated below are never
733 padded, since there is no natural width for them.
735 Following the flag an optional specification of the width is possible.
736 This is specified in decimal notation.  If the natural size of the
737 output is of the field has less than the specified number of characters,
738 the result is written right adjusted and space padded to the given
739 size.
741 An optional modifier can follow the optional flag and width
742 specification.  The modifiers, which are POSIX.2 extensions, are:
744 @table @code
745 @item E
746 Use the locale's alternate representation for date and time.  This
747 modifier applies to the @code{%c}, @code{%C}, @code{%x}, @code{%X},
748 @code{%y} and @code{%Y} format specifiers.  In a Japanese locale, for
749 example, @code{%Ex} might yield a date format based on the Japanese
750 Emperors' reigns.
752 @item O
753 Use the locale's alternate numeric symbols for numbers.  This modifier
754 applies only to numeric format specifiers.
755 @end table
757 If the format supports the modifier but no alternate representation
758 is available, it is ignored.
760 The conversion specifier ends with a format specifier taken from the
761 following list.  The whole @samp{%} sequence is replaced in the output
762 string as follows:
764 @table @code
765 @item %a
766 The abbreviated weekday name according to the current locale.
768 @item %A
769 The full weekday name according to the current locale.
771 @item %b
772 The abbreviated month name according to the current locale.
774 @item %B
775 The full month name according to the current locale.
777 @item %c
778 The preferred date and time representation for the current locale.
780 @item %C
781 The century of the year.  This is equivalent to the greatest integer not
782 greater than the year divided by 100.
784 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
786 @item %d
787 The day of the month as a decimal number (range @code{01} through @code{31}).
789 @item %D
790 The date using the format @code{%m/%d/%y}.
792 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
794 @item %e
795 The day of the month like with @code{%d}, but padded with blank (range
796 @code{ 1} through @code{31}).
798 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
800 @item %F
801 The date using the format @code{%Y-%m-%d}.  This is the form specified
802 in the @w{ISO 8601} standard and is the preferred form for all uses.
804 This format is a @w{ISO C99} extension.
806 @item %g
807 The year corresponding to the ISO week number, but without the century
808 (range @code{00} through @code{99}).  This has the same format and value
809 as @code{%y}, except that if the ISO week number (see @code{%V}) belongs
810 to the previous or next year, that year is used instead.
812 This format was introduced in @w{ISO C99}.
814 @item %G
815 The year corresponding to the ISO week number.  This has the same format
816 and value as @code{%Y}, except that if the ISO week number (see
817 @code{%V}) belongs to the previous or next year, that year is used
818 instead.
820 This format was introduced in @w{ISO C99} but was previously available
821 as a GNU extension.
823 @item %h
824 The abbreviated month name according to the current locale.  The action
825 is the same as for @code{%b}.
827 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
829 @item %H
830 The hour as a decimal number, using a 24-hour clock (range @code{00} through
831 @code{23}).
833 @item %I
834 The hour as a decimal number, using a 12-hour clock (range @code{01} through
835 @code{12}).
837 @item %j
838 The day of the year as a decimal number (range @code{001} through @code{366}).
840 @item %k
841 The hour as a decimal number, using a 24-hour clock like @code{%H}, but
842 padded with blank (range @code{ 0} through @code{23}).
844 This format is a GNU extension.
846 @item %l
847 The hour as a decimal number, using a 12-hour clock like @code{%I}, but
848 padded with blank (range @code{ 1} through @code{12}).
850 This format is a GNU extension.
852 @item %m
853 The month as a decimal number (range @code{01} through @code{12}).
855 @item %M
856 The minute as a decimal number (range @code{00} through @code{59}).
858 @item %n
859 A single @samp{\n} (newline) character.
861 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
863 @item %p
864 Either @samp{AM} or @samp{PM}, according to the given time value; or the
865 corresponding strings for the current locale.  Noon is treated as
866 @samp{PM} and midnight as @samp{AM}.
868 @ignore
869 We currently have a problem with makeinfo.  Write @samp{AM} and @samp{am}
870 both results in `am'.  I.e., the difference in case is not visible anymore.
871 @end ignore
872 @item %P
873 Either @samp{am} or @samp{pm}, according to the given time value; or the
874 corresponding strings for the current locale, printed in lowercase
875 characters.  Noon is treated as @samp{pm} and midnight as @samp{am}.
877 This format was introduced in @w{ISO C99} but was previously available
878 as a GNU extension.
880 @item %r
881 The complete time using the AM/PM format of the current locale.
883 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
885 @item %R
886 The hour and minute in decimal numbers using the format @code{%H:%M}.
888 This format was introduced in @w{ISO C99} but was previously available
889 as a GNU extension.
891 @item %s
892 The number of seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC.
893 Leap seconds are not counted unless leap second support is available.
895 This format is a GNU extension.
897 @item %S
898 The seconds as a decimal number (range @code{00} through @code{60}).
900 @item %t
901 A single @samp{\t} (tabulator) character.
903 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
905 @item %T
906 The time using decimal numbers using the format @code{%H:%M:%S}.
908 This format is a POSIX.2 extension.
910 @item %u
911 The day of the week as a decimal number (range @code{1} through
912 @code{7}), Monday being @code{1}.
914 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
916 @item %U
917 The week number of the current year as a decimal number (range @code{00}
918 through @code{53}), starting with the first Sunday as the first day of
919 the first week.  Days preceding the first Sunday in the year are
920 considered to be in week @code{00}.
922 @item %V
923 The @w{ISO 8601:1988} week number as a decimal number (range @code{01}
924 through @code{53}).  ISO weeks start with Monday and end with Sunday.
925 Week @code{01} of a year is the first week which has the majority of its
926 days in that year; this is equivalent to the week containing the year's
927 first Thursday, and it is also equivalent to the week containing January
928 4.  Week @code{01} of a year can contain days from the previous year.
929 The week before week @code{01} of a year is the last week (@code{52} or
930 @code{53}) of the previous year even if it contains days from the new
931 year.
933 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
935 @item %w
936 The day of the week as a decimal number (range @code{0} through
937 @code{6}), Sunday being @code{0}.
939 @item %W
940 The week number of the current year as a decimal number (range @code{00}
941 through @code{53}), starting with the first Monday as the first day of
942 the first week.  All days preceding the first Monday in the year are
943 considered to be in week @code{00}.
945 @item %x
946 The preferred date representation for the current locale, but without the
947 time.
949 @item %X
950 The preferred time representation for the current locale, but with no date.
952 @item %y
953 The year without a century as a decimal number (range @code{00} through
954 @code{99}).  This is equivalent to the year modulo 100.
956 @item %Y
957 The year as a decimal number, using the Gregorian calendar.  Years
958 before the year @code{1} are numbered @code{0}, @code{-1}, and so on.
960 @item %z
961 @w{RFC 822}/@w{ISO 8601:1988} style numeric time zone (e.g.,
962 @code{-0600} or @code{+0100}), or nothing if no time zone is
963 determinable.
965 This format was introduced in @w{ISO C99} but was previously available
966 as a GNU extension.
968 A full @w{RFC 822} timestamp is generated by the format
969 @w{@samp{"%a, %d %b %Y %H:%M:%S %z"}} (or the equivalent
970 @w{@samp{"%a, %d %b %Y %T %z"}}).
972 @item %Z
973 The time zone abbreviation (empty if the time zone can't be determined).
975 @item %%
976 A literal @samp{%} character.
977 @end table
979 The @var{size} parameter can be used to specify the maximum number of
980 characters to be stored in the array @var{s}, including the terminating
981 null character.  If the formatted time requires more than @var{size}
982 characters, @code{strftime} returns zero and the contents of the array
983 @var{s} are undefined.  Otherwise the return value indicates the
984 number of characters placed in the array @var{s}, not including the
985 terminating null character.
987 @emph{Warning:} This convention for the return value which is prescribed
988 in @w{ISO C} can lead to problems in some situations.  For certain
989 format strings and certain locales the output really can be the empty
990 string and this cannot be discovered by testing the return value only.
991 E.g., in most locales the AM/PM time format is not supported (most of
992 the world uses the 24 hour time representation).  In such locales
993 @code{"%p"} will return the empty string, i.e., the return value is
994 zero.  To detect situations like this something similar to the following
995 code should be used:
997 @smallexample
998 buf[0] = '\1';
999 len = strftime (buf, bufsize, format, tp);
1000 if (len == 0 && buf[0] != '\0')
1001   @{
1002     /* Something went wrong in the strftime call.  */
1003     @dots{}
1004   @}
1005 @end smallexample
1007 If @var{s} is a null pointer, @code{strftime} does not actually write
1008 anything, but instead returns the number of characters it would have written.
1010 According to POSIX.1 every call to @code{strftime} implies a call to
1011 @code{tzset}.  So the contents of the environment variable @code{TZ}
1012 is examined before any output is produced.
1014 For an example of @code{strftime}, see @ref{Time Functions Example}.
1015 @end deftypefun
1017 @comment time.h
1018 @comment ISO/Amend1
1019 @deftypefun size_t wcsftime (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, const struct tm *@var{brokentime})
1020 The @code{wcsftime} function is equivalent to the @code{strftime}
1021 function with the difference that it operates on wide character
1022 strings.  The buffer where the result is stored, pointed to by @var{s},
1023 must be an array of wide characters.  The parameter @var{size} which
1024 specifies the size of the output buffer gives the number of wide
1025 character, not the number of bytes.
1027 Also the format string @var{template} is a wide character string.  Since
1028 all characters needed to specify the format string are in the basic
1029 character set it is portably possible to write format strings in the C
1030 source code using the @code{L"..."} notation.  The parameter
1031 @var{brokentime} has the same meaning as in the @code{strftime} call.
1033 The @code{wcsftime} function supports the same flags, modifiers, and
1034 format specifiers as the @code{strftime} function.
1036 The return value of @code{wcsftime} is the number of wide characters
1037 stored in @code{s}.  When more characters would have to be written than
1038 can be placed in the buffer @var{s} the return value is zero, with the
1039 same problems indicated in the @code{strftime} documentation.
1040 @end deftypefun
1042 @node Parsing Date and Time
1043 @subsection Convert textual time and date information back
1045 The @w{ISO C} standard does not specify any functions which can convert
1046 the output of the @code{strftime} function back into a binary format.
1047 This led to a variety of more-or-less successful implementations with
1048 different interfaces over the years.  Then the Unix standard was
1049 extended by the addition of two functions: @code{strptime} and
1050 @code{getdate}.  Both have strange interfaces but at least they are
1051 widely available.
1053 @menu
1054 * Low-Level Time String Parsing::  Interpret string according to given format.
1055 * General Time String Parsing::    User-friendly function to parse data and
1056                                     time strings.
1057 @end menu
1059 @node Low-Level Time String Parsing
1060 @subsubsection Interpret string according to given format
1062 he first function is rather low-level.  It is nevertheless frequently
1063 used in software since it is better known.  Its interface and
1064 implementation are heavily influenced by the @code{getdate} function,
1065 which is defined and implemented in terms of calls to @code{strptime}.
1067 @comment time.h
1068 @comment XPG4
1069 @deftypefun {char *} strptime (const char *@var{s}, const char *@var{fmt}, struct tm *@var{tp})
1070 The @code{strptime} function parses the input string @var{s} according
1071 to the format string @var{fmt} and stores its results in the
1072 structure @var{tp}.
1074 The input string could be generated by a @code{strftime} call or
1075 obtained any other way.  It does not need to be in a human-recognizable
1076 format; e.g. a date passed as @code{"02:1999:9"} is acceptable, even
1077 though it is ambiguous without context.  As long as the format string
1078 @var{fmt} matches the input string the function will succeed.
1080 The format string consists of the same components as the format string
1081 of the @code{strftime} function.  The only difference is that the flags
1082 @code{_}, @code{-}, @code{0}, and @code{^} are not allowed.
1083 @comment Is this really the intention?  --drepper
1084 Several of the distinct formats of @code{strftime} do the same work in
1085 @code{strptime} since differences like case of the input do not matter.
1086 For reasons of symmetry all formats are supported, though.
1088 The modifiers @code{E} and @code{O} are also allowed everywhere the
1089 @code{strftime} function allows them.
1091 The formats are:
1093 @table @code
1094 @item %a
1095 @itemx %A
1096 The weekday name according to the current locale, in abbreviated form or
1097 the full name.
1099 @item %b
1100 @itemx %B
1101 @itemx %h
1102 The month name according to the current locale, in abbreviated form or
1103 the full name.
1105 @item %c
1106 The date and time representation for the current locale.
1108 @item %Ec
1109 Like @code{%c} but the locale's alternative date and time format is used.
1111 @item %C
1112 The century of the year.
1114 It makes sense to use this format only if the format string also
1115 contains the @code{%y} format.
1117 @item %EC
1118 The locale's representation of the period.
1120 Unlike @code{%C} it sometimes makes sense to use this format since some
1121 cultures represent years relative to the beginning of eras instead of
1122 using the Gregorian years.
1124 @item %d
1125 @item %e
1126 The day of the month as a decimal number (range @code{1} through @code{31}).
1127 Leading zeroes are permitted but not required.
1129 @item %Od
1130 @itemx %Oe
1131 Same as @code{%d} but using the locale's alternative numeric symbols.
1133 Leading zeroes are permitted but not required.
1135 @item %D
1136 Equivalent to @code{%m/%d/%y}.
1138 @item %F
1139 Equivalent to @code{%Y-%m-%d}, which is the @w{ISO 8601} date
1140 format.
1142 This is a GNU extension following an @w{ISO C99} extension to
1143 @code{strftime}.
1145 @item %g
1146 The year corresponding to the ISO week number, but without the century
1147 (range @code{00} through @code{99}).
1149 @emph{Note:} Currently, this is not fully implemented.  The format is
1150 recognized, input is consumed but no field in @var{tm} is set.
1152 This format is a GNU extension following a GNU extension of @code{strftime}.
1154 @item %G
1155 The year corresponding to the ISO week number.
1157 @emph{Note:} Currently, this is not fully implemented.  The format is
1158 recognized, input is consumed but no field in @var{tm} is set.
1160 This format is a GNU extension following a GNU extension of @code{strftime}.
1162 @item %H
1163 @itemx %k
1164 The hour as a decimal number, using a 24-hour clock (range @code{00} through
1165 @code{23}).
1167 @code{%k} is a GNU extension following a GNU extension of @code{strftime}.
1169 @item %OH
1170 Same as @code{%H} but using the locale's alternative numeric symbols.
1172 @item %I
1173 @itemx %l
1174 The hour as a decimal number, using a 12-hour clock (range @code{01} through
1175 @code{12}).
1177 @code{%l} is a GNU extension following a GNU extension of @code{strftime}.
1179 @item %OI
1180 Same as @code{%I} but using the locale's alternative numeric symbols.
1182 @item %j
1183 The day of the year as a decimal number (range @code{1} through @code{366}).
1185 Leading zeroes are permitted but not required.
1187 @item %m
1188 The month as a decimal number (range @code{1} through @code{12}).
1190 Leading zeroes are permitted but not required.
1192 @item %Om
1193 Same as @code{%m} but using the locale's alternative numeric symbols.
1195 @item %M
1196 The minute as a decimal number (range @code{0} through @code{59}).
1198 Leading zeroes are permitted but not required.
1200 @item %OM
1201 Same as @code{%M} but using the locale's alternative numeric symbols.
1203 @item %n
1204 @itemx %t
1205 Matches any white space.
1207 @item %p
1208 @item %P
1209 The locale-dependent equivalent to @samp{AM} or @samp{PM}.
1211 This format is not useful unless @code{%I} or @code{%l} is also used.
1212 Another complication is that the locale might not define these values at
1213 all and therefore the conversion fails.
1215 @code{%P} is a GNU extension following a GNU extension to @code{strftime}.
1217 @item %r
1218 The complete time using the AM/PM format of the current locale.
1220 A complication is that the locale might not define this format at all
1221 and therefore the conversion fails.
1223 @item %R
1224 The hour and minute in decimal numbers using the format @code{%H:%M}.
1226 @code{%R} is a GNU extension following a GNU extension to @code{strftime}.
1228 @item %s
1229 The number of seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC.
1230 Leap seconds are not counted unless leap second support is available.
1232 @code{%s} is a GNU extension following a GNU extension to @code{strftime}.
1234 @item %S
1235 The seconds as a decimal number (range @code{0} through @code{61}).
1237 Leading zeroes are permitted but not required.
1239 Note the nonsense with @code{61}, as given in the Unix specification.
1240 This is a result of a decision to allow double leap seconds.  These do
1241 not in fact exist but the myth persists.
1243 @item %OS
1244 Same as @code{%S} but using the locale's alternative numeric symbols.
1246 @item %T
1247 Equivalent to the use of @code{%H:%M:%S} in this place.
1249 @item %u
1250 The day of the week as a decimal number (range @code{1} through
1251 @code{7}), Monday being @code{1}.
1253 Leading zeroes are permitted but not required.
1255 @emph{Note:} Currently, this is not fully implemented.  The format is
1256 recognized, input is consumed but no field in @var{tm} is set.
1258 @item %U
1259 The week number of the current year as a decimal number (range @code{0}
1260 through @code{53}).
1262 Leading zeroes are permitted but not required.
1264 @item %OU
1265 Same as @code{%U} but using the locale's alternative numeric symbols.
1267 @item %V
1268 The @w{ISO 8601:1988} week number as a decimal number (range @code{1}
1269 through @code{53}).
1271 Leading zeroes are permitted but not required.
1273 @emph{Note:} Currently, this is not fully implemented.  The format is
1274 recognized, input is consumed but no field in @var{tm} is set.
1276 @item %w
1277 The day of the week as a decimal number (range @code{0} through
1278 @code{6}), Sunday being @code{0}.
1280 Leading zeroes are permitted but not required.
1282 @emph{Note:} Currently, this is not fully implemented.  The format is
1283 recognized, input is consumed but no field in @var{tm} is set.
1285 @item %Ow
1286 Same as @code{%w} but using the locale's alternative numeric symbols.
1288 @item %W
1289 The week number of the current year as a decimal number (range @code{0}
1290 through @code{53}).
1292 Leading zeroes are permitted but not required.
1294 @emph{Note:} Currently, this is not fully implemented.  The format is
1295 recognized, input is consumed but no field in @var{tm} is set.
1297 @item %OW
1298 Same as @code{%W} but using the locale's alternative numeric symbols.
1300 @item %x
1301 The date using the locale's date format.
1303 @item %Ex
1304 Like @code{%x} but the locale's alternative data representation is used.
1306 @item %X
1307 The time using the locale's time format.
1309 @item %EX
1310 Like @code{%X} but the locale's alternative time representation is used.
1312 @item %y
1313 The year without a century as a decimal number (range @code{0} through
1314 @code{99}).
1316 Leading zeroes are permitted but not required.
1318 Note that it is questionable to use this format without
1319 the @code{%C} format.  The @code{strptime} function does regard input
1320 values in the range @math{68} to @math{99} as the years @math{1969} to
1321 @math{1999} and the values @math{0} to @math{68} as the years
1322 @math{2000} to @math{2068}.  But maybe this heuristic fails for some
1323 input data.
1325 Therefore it is best to avoid @code{%y} completely and use @code{%Y}
1326 instead.
1328 @item %Ey
1329 The offset from @code{%EC} in the locale's alternative representation.
1331 @item %Oy
1332 The offset of the year (from @code{%C}) using the locale's alternative
1333 numeric symbols.
1335 @item %Y
1336 The year as a decimal number, using the Gregorian calendar.
1338 @item %EY
1339 The full alternative year representation.
1341 @item %z
1342 Equivalent to the use of @code{%a, %d %b %Y %H:%M:%S %z} in this place.
1343 This is the full @w{ISO 8601} date and time format.
1345 @item %Z
1346 The timezone name.
1348 @emph{Note:} Currently, this is not fully implemented.  The format is
1349 recognized, input is consumed but no field in @var{tm} is set.
1351 @item %%
1352 A literal @samp{%} character.
1353 @end table
1355 All other characters in the format string must have a matching character
1356 in the input string.  Exceptions are white spaces in the input string
1357 which can match zero or more white space characters in the format string.
1359 The @code{strptime} function processes the input string from right to
1360 left.  Each of the three possible input elements (white space, literal,
1361 or format) are handled one after the other.  If the input cannot be
1362 matched to the format string the function stops.  The remainder of the
1363 format and input strings are not processed.
1365 The function returns a pointer to the first character it was unable to
1366 process.  If the input string contains more characters than required by
1367 the format string the return value points right after the last consumed
1368 input character.  If the whole input string is consumed the return value
1369 points to the @code{NULL} byte at the end of the string.  If an error
1370 occurs, i.e. @code{strptime} fails to match all of the format string,
1371 the function returns @code{NULL}.
1372 @end deftypefun
1374 The specification of the function in the XPG standard is rather vague,
1375 leaving out a few important pieces of information.  Most importantly, it
1376 does not specify what happens to those elements of @var{tm} which are
1377 not directly initialized by the different formats.  The
1378 implementations on different Unix systems vary here.
1380 The GNU libc implementation does not touch those fields which are not
1381 directly initialized.  Exceptions are the @code{tm_wday} and
1382 @code{tm_yday} elements, which are recomputed if any of the year, month,
1383 or date elements changed.  This has two implications:
1385 @itemize @bullet
1386 @item
1387 Before calling the @code{strptime} function for a new input string, you
1388 should prepare the @var{tm} structure you pass.  Normally this will mean
1389 initializing all values are to zero.  Alternatively, you can set all
1390 fields to values like @code{INT_MAX}, allowing you to determine which
1391 elements were set by the function call.  Zero does not work here since
1392 it is a valid value for many of the fields.
1394 Careful initialization is necessary if you want to find out whether a
1395 certain field in @var{tm} was initialized by the function call.
1397 @item
1398 You can construct a @code{struct tm} value with several consecutive
1399 @code{strptime} calls.  A useful application of this is e.g. the parsing
1400 of two separate strings, one containing date information and the other
1401 time information.  By parsing one after the other without clearing the
1402 structure in-between, you can construct a complete broken-down time.
1403 @end itemize
1405 The following example shows a function which parses a string which is
1406 contains the date information in either US style or @w{ISO 8601} form:
1408 @smallexample
1409 const char *
1410 parse_date (const char *input, struct tm *tm)
1412   const char *cp;
1414   /* @r{First clear the result structure.}  */
1415   memset (tm, '\0', sizeof (*tm));
1417   /* @r{Try the ISO format first.}  */
1418   cp = strptime (input, "%F", tm);
1419   if (cp == NULL)
1420     @{
1421       /* @r{Does not match.  Try the US form.}  */
1422       cp = strptime (input, "%D", tm);
1423     @}
1425   return cp;
1427 @end smallexample
1429 @node General Time String Parsing
1430 @subsubsection A More User-friendly Way to Parse Times and Dates
1432 The Unix standard defines another function for parsing date strings.
1433 The interface is weird, but if the function happens to suit your
1434 application it is just fine.  It is problematic to use this function
1435 in multi-threaded programs or libraries, since it returns a pointer to
1436 a static variable, and uses a global variable and global state (an
1437 environment variable).
1439 @comment time.h
1440 @comment Unix98
1441 @defvar getdate_err
1442 This variable of type @code{int} contains the error code of the last
1443 unsuccessful call to @code{getdate}.  Defined values are:
1445 @table @math
1446 @item 1
1447 The environment variable @code{DATEMSK} is not defined or null.
1448 @item 2
1449 The template file denoted by the @code{DATEMSK} environment variable
1450 cannot be opened.
1451 @item 3
1452 Information about the template file cannot retrieved.
1453 @item 4
1454 The template file is not a regular file.
1455 @item 5
1456 An I/O error occurred while reading the template file.
1457 @item 6
1458 Not enough memory available to execute the function.
1459 @item 7
1460 The template file contains no matching template.
1461 @item 8
1462 The input date is invalid, but would match a template otherwise.  This
1463 includes dates like February 31st, and dates which cannot be represented
1464 in a @code{time_t} variable.
1465 @end table
1466 @end defvar
1468 @comment time.h
1469 @comment Unix98
1470 @deftypefun {struct tm *} getdate (const char *@var{string})
1471 The interface to @code{getdate} is the simplest possible for a function
1472 to parse a string and return the value.  @var{string} is the input
1473 string and the result is returned in a statically-allocated variable.
1475 The details about how the string is processed are hidden from the user.
1476 In fact, they can be outside the control of the program.  Which formats
1477 are recognized is controlled by the file named by the environment
1478 variable @code{DATEMSK}.  This file should contain
1479 lines of valid format strings which could be passed to @code{strptime}.
1481 The @code{getdate} function reads these format strings one after the
1482 other and tries to match the input string.  The first line which
1483 completely matches the input string is used.
1485 Elements not initialized through the format string retain the values
1486 present at the time of the @code{getdate} function call.
1488 The formats recognized by @code{getdate} are the same as for
1489 @code{strptime}.  See above for an explanation.  There are only a few
1490 extensions to the @code{strptime} behavior:
1492 @itemize @bullet
1493 @item
1494 If the @code{%Z} format is given the broken-down time is based on the
1495 current time of the timezone matched, not of the current timezone of the
1496 runtime environment.
1498 @emph{Note}: This is not implemented (currently).  The problem is that
1499 timezone names are not unique.  If a fixed timezone is assumed for a
1500 given string (say @code{EST} meaning US East Coast time), then uses for
1501 countries other than the USA will fail.  So far we have found no good
1502 solution to this.
1504 @item
1505 If only the weekday is specified the selected day depends on the current
1506 date.  If the current weekday is greater or equal to the @code{tm_wday}
1507 value the current week's day is chosen, otherwise the day next week is chosen.
1509 @item
1510 A similar heuristic is used when only the month is given and not the
1511 year.  If the month is greater than or equal to the current month, then
1512 the current year is used.  Otherwise it wraps to next year.  The first
1513 day of the month is assumed if one is not explicitly specified.
1515 @item
1516 The current hour, minute, and second are used if the appropriate value is
1517 not set through the format.
1519 @item
1520 If no date is given tomorrow's date is used if the time is
1521 smaller than the current time.  Otherwise today's date is taken.
1522 @end itemize
1524 It should be noted that the format in the template file need not only
1525 contain format elements.  The following is a list of possible format
1526 strings (taken from the Unix standard):
1528 @smallexample
1530 %A %B %d, %Y %H:%M:%S
1533 %m/%d/%y %I %p
1534 %d,%m,%Y %H:%M
1535 at %A the %dst of %B in %Y
1536 run job at %I %p,%B %dnd
1537 %A den %d. %B %Y %H.%M Uhr
1538 @end smallexample
1540 As you can see, the template list can contain very specific strings like
1541 @code{run job at %I %p,%B %dnd}.  Using the above list of templates and
1542 assuming the current time is Mon Sep 22 12:19:47 EDT 1986 we can obtain the
1543 following results for the given input.
1545 @multitable {xxxxxxxxxxxx} {xxxxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
1546 @item        Input @tab     Match @tab Result
1547 @item        Mon @tab       %a @tab    Mon Sep 22 12:19:47 EDT 1986
1548 @item        Sun @tab       %a @tab    Sun Sep 28 12:19:47 EDT 1986
1549 @item        Fri @tab       %a @tab    Fri Sep 26 12:19:47 EDT 1986
1550 @item        September @tab %B @tab    Mon Sep 1 12:19:47 EDT 1986
1551 @item        January @tab   %B @tab    Thu Jan 1 12:19:47 EST 1987
1552 @item        December @tab  %B @tab    Mon Dec 1 12:19:47 EST 1986
1553 @item        Sep Mon @tab   %b %a @tab Mon Sep 1 12:19:47 EDT 1986
1554 @item        Jan Fri @tab   %b %a @tab Fri Jan 2 12:19:47 EST 1987
1555 @item        Dec Mon @tab   %b %a @tab Mon Dec 1 12:19:47 EST 1986
1556 @item        Jan Wed 1989 @tab  %b %a %Y @tab Wed Jan 4 12:19:47 EST 1989
1557 @item        Fri 9 @tab     %a %H @tab Fri Sep 26 09:00:00 EDT 1986
1558 @item        Feb 10:30 @tab %b %H:%S @tab Sun Feb 1 10:00:30 EST 1987
1559 @item        10:30 @tab     %H:%M @tab Tue Sep 23 10:30:00 EDT 1986
1560 @item        13:30 @tab     %H:%M @tab Mon Sep 22 13:30:00 EDT 1986
1561 @end multitable
1563 The return value of the function is a pointer to a static variable of
1564 type @w{@code{struct tm}}, or a null pointer if an error occurred.  The
1565 result is only valid until the next @code{getdate} call, making this
1566 function unusable in multi-threaded applications.
1568 The @code{errno} variable is @emph{not} changed.  Error conditions are
1569 stored in the global variable @code{getdate_err}.  See the
1570 description above for a list of the possible error values.
1572 @emph{Warning:} The @code{getdate} function should @emph{never} be
1573 used in SUID-programs.  The reason is obvious: using the
1574 @code{DATEMSK} environment variable you can get the function to open
1575 any arbitrary file and chances are high that with some bogus input
1576 (such as a binary file) the program will crash.
1577 @end deftypefun
1579 @comment time.h
1580 @comment GNU
1581 @deftypefun int getdate_r (const char *@var{string}, struct tm *@var{tp})
1582 The @code{getdate_r} function is the reentrant counterpart of
1583 @code{getdate}.  It does not use the global variable @code{getdate_err}
1584 to signal an error, but instead returns an error code.  The same error
1585 codes as described in the @code{getdate_err} documentation above are
1586 used, with 0 meaning success.
1588 Moreover, @code{getdate_r} stores the broken-down time in the variable
1589 of type @code{struct tm} pointed to by the second argument, rather than
1590 in a static variable.
1592 This function is not defined in the Unix standard.  Nevertheless it is
1593 available on some other Unix systems as well.
1595 The warning against using @code{getdate} in SUID-programs applies to
1596 @code{getdate_r} as well.
1597 @end deftypefun
1599 @node TZ Variable
1600 @subsection Specifying the Time Zone with @code{TZ}
1602 In POSIX systems, a user can specify the time zone by means of the
1603 @code{TZ} environment variable.  For information about how to set
1604 environment variables, see @ref{Environment Variables}.  The functions
1605 for accessing the time zone are declared in @file{time.h}.
1606 @pindex time.h
1607 @cindex time zone
1609 You should not normally need to set @code{TZ}.  If the system is
1610 configured properly, the default time zone will be correct.  You might
1611 set @code{TZ} if you are using a computer over a network from a
1612 different time zone, and would like times reported to you in the time
1613 zone local to you, rather than what is local to the computer.
1615 In POSIX.1 systems the value of the @code{TZ} variable can be in one of
1616 three formats.  With the GNU C library, the most common format is the
1617 last one, which can specify a selection from a large database of time
1618 zone information for many regions of the world.  The first two formats
1619 are used to describe the time zone information directly, which is both
1620 more cumbersome and less precise.  But the POSIX.1 standard only
1621 specifies the details of the first two formats, so it is good to be
1622 familiar with them in case you come across a POSIX.1 system that doesn't
1623 support a time zone information database.
1625 The first format is used when there is no Daylight Saving Time (or
1626 summer time) in the local time zone:
1628 @smallexample
1629 @r{@var{std} @var{offset}}
1630 @end smallexample
1632 The @var{std} string specifies the name of the time zone.  It must be
1633 three or more characters long and must not contain a leading colon,
1634 embedded digits, commas, nor plus and minus signs.  There is no space
1635 character separating the time zone name from the @var{offset}, so these
1636 restrictions are necessary to parse the specification correctly.
1638 The @var{offset} specifies the time value you must add to the local time
1639 to get a Coordinated Universal Time value.  It has syntax like
1640 [@code{+}|@code{-}]@var{hh}[@code{:}@var{mm}[@code{:}@var{ss}]].  This
1641 is positive if the local time zone is west of the Prime Meridian and
1642 negative if it is east.  The hour must be between @code{0} and
1643 @code{23}, and the minute and seconds between @code{0} and @code{59}.
1645 For example, here is how we would specify Eastern Standard Time, but
1646 without any Daylight Saving Time alternative:
1648 @smallexample
1649 EST+5
1650 @end smallexample
1652 The second format is used when there is Daylight Saving Time:
1654 @smallexample
1655 @r{@var{std} @var{offset} @var{dst} [@var{offset}]@code{,}@var{start}[@code{/}@var{time}]@code{,}@var{end}[@code{/}@var{time}]}
1656 @end smallexample
1658 The initial @var{std} and @var{offset} specify the standard time zone, as
1659 described above.  The @var{dst} string and @var{offset} specify the name
1660 and offset for the corresponding Daylight Saving Time zone; if the
1661 @var{offset} is omitted, it defaults to one hour ahead of standard time.
1663 The remainder of the specification describes when Daylight Saving Time is
1664 in effect.  The @var{start} field is when Daylight Saving Time goes into
1665 effect and the @var{end} field is when the change is made back to standard
1666 time.  The following formats are recognized for these fields:
1668 @table @code
1669 @item J@var{n}
1670 This specifies the Julian day, with @var{n} between @code{1} and @code{365}.
1671 February 29 is never counted, even in leap years.
1673 @item @var{n}
1674 This specifies the Julian day, with @var{n} between @code{0} and @code{365}.
1675 February 29 is counted in leap years.
1677 @item M@var{m}.@var{w}.@var{d}
1678 This specifies day @var{d} of week @var{w} of month @var{m}.  The day
1679 @var{d} must be between @code{0} (Sunday) and @code{6}.  The week
1680 @var{w} must be between @code{1} and @code{5}; week @code{1} is the
1681 first week in which day @var{d} occurs, and week @code{5} specifies the
1682 @emph{last} @var{d} day in the month.  The month @var{m} should be
1683 between @code{1} and @code{12}.
1684 @end table
1686 The @var{time} fields specify when, in the local time currently in
1687 effect, the change to the other time occurs.  If omitted, the default is
1688 @code{02:00:00}.
1690 For example, here is how you would specify the Eastern time zone in the
1691 United States, including the appropriate Daylight Saving Time and its dates
1692 of applicability.  The normal offset from UTC is 5 hours; since this is
1693 west of the prime meridian, the sign is positive.  Summer time begins on
1694 the first Sunday in April at 2:00am, and ends on the last Sunday in October
1695 at 2:00am.
1697 @smallexample
1698 EST+5EDT,M4.1.0/2,M10.5.0/2
1699 @end smallexample
1701 The schedule of Daylight Saving Time in any particular jurisdiction has
1702 changed over the years.  To be strictly correct, the conversion of dates
1703 and times in the past should be based on the schedule that was in effect
1704 then.  However, this format has no facilities to let you specify how the
1705 schedule has changed from year to year.  The most you can do is specify
1706 one particular schedule---usually the present day schedule---and this is
1707 used to convert any date, no matter when.  For precise time zone
1708 specifications, it is best to use the time zone information database
1709 (see below).
1711 The third format looks like this:
1713 @smallexample
1714 :@var{characters}
1715 @end smallexample
1717 Each operating system interprets this format differently; in the GNU C
1718 library, @var{characters} is the name of a file which describes the time
1719 zone.
1721 @pindex /etc/localtime
1722 @pindex localtime
1723 If the @code{TZ} environment variable does not have a value, the
1724 operation chooses a time zone by default.  In the GNU C library, the
1725 default time zone is like the specification @samp{TZ=:/etc/localtime}
1726 (or @samp{TZ=:/usr/local/etc/localtime}, depending on how GNU C library
1727 was configured; @pxref{Installation}).  Other C libraries use their own
1728 rule for choosing the default time zone, so there is little we can say
1729 about them.
1731 @cindex time zone database
1732 @pindex /share/lib/zoneinfo
1733 @pindex zoneinfo
1734 If @var{characters} begins with a slash, it is an absolute file name;
1735 otherwise the library looks for the file
1736 @w{@file{/share/lib/zoneinfo/@var{characters}}}.  The @file{zoneinfo}
1737 directory contains data files describing local time zones in many
1738 different parts of the world.  The names represent major cities, with
1739 subdirectories for geographical areas; for example,
1740 @file{America/New_York}, @file{Europe/London}, @file{Asia/Hong_Kong}.
1741 These data files are installed by the system administrator, who also
1742 sets @file{/etc/localtime} to point to the data file for the local time
1743 zone.  The GNU C library comes with a large database of time zone
1744 information for most regions of the world, which is maintained by a
1745 community of volunteers and put in the public domain.
1747 @node Time Zone Functions
1748 @subsection Functions and Variables for Time Zones
1750 @comment time.h
1751 @comment POSIX.1
1752 @deftypevar {char *} tzname [2]
1753 The array @code{tzname} contains two strings, which are the standard
1754 names of the pair of time zones (standard and Daylight
1755 Saving) that the user has selected.  @code{tzname[0]} is the name of
1756 the standard time zone (for example, @code{"EST"}), and @code{tzname[1]}
1757 is the name for the time zone when Daylight Saving Time is in use (for
1758 example, @code{"EDT"}).  These correspond to the @var{std} and @var{dst}
1759 strings (respectively) from the @code{TZ} environment variable.  If
1760 Daylight Saving Time is never used, @code{tzname[1]} is the empty string.
1762 The @code{tzname} array is initialized from the @code{TZ} environment
1763 variable whenever @code{tzset}, @code{ctime}, @code{strftime},
1764 @code{mktime}, or @code{localtime} is called.  If multiple abbreviations
1765 have been used (e.g. @code{"EWT"} and @code{"EDT"} for U.S. Eastern War
1766 Time and Eastern Daylight Time), the array contains the most recent
1767 abbreviation.
1769 The @code{tzname} array is required for POSIX.1 compatibility, but in
1770 GNU programs it is better to use the @code{tm_zone} member of the
1771 broken-down time structure, since @code{tm_zone} reports the correct
1772 abbreviation even when it is not the latest one.
1774 Though the strings are declared as @code{char *} the user must refrain
1775 from modifying these strings.  Modifying the strings will almost certainly
1776 lead to trouble.
1778 @end deftypevar
1780 @comment time.h
1781 @comment POSIX.1
1782 @deftypefun void tzset (void)
1783 The @code{tzset} function initializes the @code{tzname} variable from
1784 the value of the @code{TZ} environment variable.  It is not usually
1785 necessary for your program to call this function, because it is called
1786 automatically when you use the other time conversion functions that
1787 depend on the time zone.
1788 @end deftypefun
1790 The following variables are defined for compatibility with System V
1791 Unix.  Like @code{tzname}, these variables are set by calling
1792 @code{tzset} or the other time conversion functions.
1794 @comment time.h
1795 @comment SVID
1796 @deftypevar {long int} timezone
1797 This contains the difference between UTC and the latest local standard
1798 time, in seconds west of UTC.  For example, in the U.S. Eastern time
1799 zone, the value is @code{5*60*60}.  Unlike the @code{tm_gmtoff} member
1800 of the broken-down time structure, this value is not adjusted for
1801 daylight saving, and its sign is reversed.  In GNU programs it is better
1802 to use @code{tm_gmtoff}, since it contains the correct offset even when
1803 it is not the latest one.
1804 @end deftypevar
1806 @comment time.h
1807 @comment SVID
1808 @deftypevar int daylight
1809 This variable has a nonzero value if Daylight Saving Time rules apply.
1810 A nonzero value does not necessarily mean that Daylight Saving Time is
1811 now in effect; it means only that Daylight Saving Time is sometimes in
1812 effect.
1813 @end deftypevar
1815 @node Time Functions Example
1816 @subsection Time Functions Example
1818 Here is an example program showing the use of some of the local time and
1819 calendar time functions.
1821 @smallexample
1822 @include strftim.c.texi
1823 @end smallexample
1825 It produces output like this:
1827 @smallexample
1828 Wed Jul 31 13:02:36 1991
1829 Today is Wednesday, July 31.
1830 The time is 01:02 PM.
1831 @end smallexample
1834 @node Precision Time
1835 @section Precision Time
1837 @cindex time, high precision
1838 @pindex sys/timex.h
1839 The @code{net_gettime} and @code{ntp_adjtime} functions provide an
1840 interface to monitor and manipulate high precision time.  These
1841 functions are declared in @file{sys/timex.h}.
1843 @tindex struct ntptimeval
1844 @deftp {Data Type} {struct ntptimeval}
1845 This structure is used to monitor kernel time.  It contains the
1846 following members:
1847 @table @code
1848 @item struct timeval time
1849 This is the current time.  The @code{struct timeval} data type is
1850 described in @ref{High-Resolution Calendar}.
1852 @item long int maxerror
1853 This is the maximum error, measured in microseconds.  Unless updated
1854 via @code{ntp_adjtime} periodically, this value will reach some
1855 platform-specific maximum value.
1857 @item long int esterror
1858 This is the estimated error, measured in microseconds.  This value can
1859 be set by @code{ntp_adjtime} to indicate the estimated offset of the
1860 local clock against the true time.
1861 @end table
1862 @end deftp
1864 @comment sys/timex,h
1865 @comment GNU
1866 @deftypefun int ntp_gettime (struct ntptimeval *@var{tptr})
1867 The @code{ntp_gettime} function sets the structure pointed to by
1868 @var{tptr} to current values.  The elements of the structure afterwards
1869 contain the values the timer implementation in the kernel assumes.  They
1870 might or might not be correct.  If they are not a @code{ntp_adjtime}
1871 call is necessary.
1873 The return value is @code{0} on success and other values on failure.  The
1874 following @code{errno} error conditions are defined for this function:
1876 @table @code
1877 @item TIME_ERROR
1878 The precision clock model is not properly set up at the moment, thus the
1879 clock must be considered unsynchronized, and the values should be
1880 treated with care.
1881 @end table
1882 @end deftypefun
1884 @tindex struct timex
1885 @deftp {Data Type} {struct timex}
1886 This structure is used to control and monitor kernel time in a greater
1887 level of detail.  It contains the following members:
1888 @table @code
1889 @item unsigned int modes
1890 This variable controls whether and which values are set.  Several
1891 symbolic constants have to be combined with @emph{binary or} to specify
1892 the effective mode.  These constants start with @code{MOD_}.
1894 @item long int offset
1895 This value indicates the current offset of the local clock from the true
1896 time.  The value is given in microseconds.  If bit @code{MOD_OFFSET} is
1897 set in @code{modes}, the offset (and possibly other dependent values) can
1898 be set.  The offset's absolute value must not exceed @code{MAXPHASE}.
1900 @item long int frequency
1901 This value indicates the difference in frequency between the true time
1902 and the local clock.  The value is expressed as scaled PPM (parts per
1903 million, 0.0001%).  The scaling is @code{1 << SHIFT_USEC}.  The value
1904 can be set with bit @code{MOD_FREQUENCY}, but the absolute value must
1905 not exceed @code{MAXFREQ}.
1907 @item long int maxerror
1908 This is the maximum error, measured in microseconds.  A new value can be
1909 set using bit @code{MOD_MAXERROR}.  Unless updated via
1910 @code{ntp_adjtime} periodically, this value will increase steadily
1911 and reach some platform-specific maximum value.
1913 @item long int esterror
1914 This is the estimated error, measured in microseconds.  This value can
1915 be set using bit @code{MOD_ESTERROR}.
1917 @item int status
1918 This variable reflects the various states of the clock machinery.  There
1919 are symbolic constants for the significant bits, starting with
1920 @code{STA_}.  Some of these flags can be updated using the
1921 @code{MOD_STATUS} bit.
1923 @item long int constant
1924 This value represents the bandwidth or stiffness of the PLL (phase
1925 locked loop) implemented in the kernel.  The value can be changed using
1926 bit @code{MOD_TIMECONST}.
1928 @item long int precision
1929 This value represents the accuracy or the maximum error when reading the
1930 system clock.  The value is expressed in microseconds and can't be changed.
1932 @item long int tolerance
1933 This value represents the maximum frequency error of the system clock in
1934 scaled PPM.  This value is used to increase the @code{maxerror} every
1935 second.
1937 @item long int ppsfreq
1938 This is the first of a few optional variables that are present only if
1939 the system clock can use a PPS (pulse per second) signal to discipline
1940 the local clock.  The value is expressed in scaled PPM and it denotes
1941 the difference in frequency between the local clock and the PPS signal.
1943 @item long int jitter
1944 This value expresses a median filtered average of the PPS signal's
1945 dispersion in microseconds.
1947 @item int int shift
1948 This value is a binary exponent for the duration of the PPS calibration
1949 interval, ranging from @code{PPS_SHIFT} to @code{PPS_SHIFTMAX}.
1951 @item long int stabil
1952 This value represents the median filtered dispersion of the PPS
1953 frequency in scaled PPM.
1955 @item long int jitcnt
1956 This counter represents the number of pulses where the jitter exceeded
1957 the allowed maximum @code{MAXTIME}.
1959 @item long int calcnt
1960 This counter reflects the number of successful calibration intervals.
1962 @item long int errcnt
1963 This counter represents the number of calibration errors (caused by
1964 large offsets or jitter).
1966 @item long int stbcnt
1967 This counter denotes the number of of calibrations where the stability
1968 exceeded the threshold.
1969 @end table
1970 @end deftp
1972 @comment sys/timex.h
1973 @comment GNU
1974 @deftypefun int ntp_adjtime (struct timex *@var{tptr})
1975 The @code{ntp_adjtime} function sets the structure specified by
1976 @var{tptr} to current values.  In addition, values passed in @var{tptr}
1977 can be used to replace existing settings.  To do this the @code{modes}
1978 element of the @code{struct timex} must be set appropriately.  Setting
1979 it to zero selects reading the current state.
1981 The return value is @code{0} on success and other values on failure.  The
1982 following @code{errno} error conditions are defined for this function:
1984 @table @code
1985 @item TIME_ERROR
1986 The precision clock model is not properly set up at the moment, thus the
1987 clock must be considered unsynchronized, and the values should be
1988 treated with care.  Another reason could be that the specified new values
1989 are not allowed.
1990 @end table
1992 For more details see RFC1305 (Network Time Protocol, Version 3) and
1993 related documents.
1994 @end deftypefun
1997 @node Setting an Alarm
1998 @section Setting an Alarm
2000 The @code{alarm} and @code{setitimer} functions provide a mechanism for a
2001 process to interrupt itself at some future time.  They do this by setting a
2002 timer; when the timer expires, the process receives a signal.
2004 @cindex setting an alarm
2005 @cindex interval timer, setting
2006 @cindex alarms, setting
2007 @cindex timers, setting
2008 Each process has three independent interval timers available:
2010 @itemize @bullet
2011 @item
2012 A real-time timer that counts clock time.  This timer sends a
2013 @code{SIGALRM} signal to the process when it expires.
2014 @cindex real-time timer
2015 @cindex timer, real-time
2017 @item
2018 A virtual timer that counts CPU time used by the process.  This timer
2019 sends a @code{SIGVTALRM} signal to the process when it expires.
2020 @cindex virtual timer
2021 @cindex timer, virtual
2023 @item
2024 A profiling timer that counts both CPU time used by the process, and CPU
2025 time spent in system calls on behalf of the process.  This timer sends a
2026 @code{SIGPROF} signal to the process when it expires.
2027 @cindex profiling timer
2028 @cindex timer, profiling
2030 This timer is useful for profiling in interpreters.  The interval timer
2031 mechanism does not have the fine granularity necessary for profiling
2032 native code.
2033 @c @xref{profil} !!!
2034 @end itemize
2036 You can only have one timer of each kind set at any given time.  If you
2037 set a timer that has not yet expired, that timer is simply reset to the
2038 new value.
2040 You should establish a handler for the appropriate alarm signal using
2041 @code{signal} or @code{sigaction} before issuing a call to
2042 @code{setitimer} or @code{alarm}.  Otherwise, an unusual chain of events
2043 could cause the timer to expire before your program establishes the
2044 handler.  In this case it would be terminated, since termination is the
2045 default action for the alarm signals.  @xref{Signal Handling}.
2047 The @code{setitimer} function is the primary means for setting an alarm.
2048 This facility is declared in the header file @file{sys/time.h}.  The
2049 @code{alarm} function, declared in @file{unistd.h}, provides a somewhat
2050 simpler interface for setting the real-time timer.
2051 @pindex unistd.h
2052 @pindex sys/time.h
2054 @comment sys/time.h
2055 @comment BSD
2056 @deftp {Data Type} {struct itimerval}
2057 This structure is used to specify when a timer should expire.  It contains
2058 the following members:
2059 @table @code
2060 @item struct timeval it_interval
2061 This is the interval between successive timer interrupts.  If zero, the
2062 alarm will only be sent once.
2064 @item struct timeval it_value
2065 This is the interval to the first timer interrupt.  If zero, the alarm is
2066 disabled.
2067 @end table
2069 The @code{struct timeval} data type is described in @ref{High-Resolution
2070 Calendar}.
2071 @end deftp
2073 @comment sys/time.h
2074 @comment BSD
2075 @deftypefun int setitimer (int @var{which}, struct itimerval *@var{new}, struct itimerval *@var{old})
2076 The @code{setitimer} function sets the timer specified by @var{which}
2077 according to @var{new}.  The @var{which} argument can have a value of
2078 @code{ITIMER_REAL}, @code{ITIMER_VIRTUAL}, or @code{ITIMER_PROF}.
2080 If @var{old} is not a null pointer, @code{setitimer} returns information
2081 about any previous unexpired timer of the same kind in the structure it
2082 points to.
2084 The return value is @code{0} on success and @code{-1} on failure.  The
2085 following @code{errno} error conditions are defined for this function:
2087 @table @code
2088 @item EINVAL
2089 The timer interval was too large.
2090 @end table
2091 @end deftypefun
2093 @comment sys/time.h
2094 @comment BSD
2095 @deftypefun int getitimer (int @var{which}, struct itimerval *@var{old})
2096 The @code{getitimer} function stores information about the timer specified
2097 by @var{which} in the structure pointed at by @var{old}.
2099 The return value and error conditions are the same as for @code{setitimer}.
2100 @end deftypefun
2102 @comment sys/time.h
2103 @comment BSD
2104 @table @code
2105 @item ITIMER_REAL
2106 @findex ITIMER_REAL
2107 This constant can be used as the @var{which} argument to the
2108 @code{setitimer} and @code{getitimer} functions to specify the real-time
2109 timer.
2111 @comment sys/time.h
2112 @comment BSD
2113 @item ITIMER_VIRTUAL
2114 @findex ITIMER_VIRTUAL
2115 This constant can be used as the @var{which} argument to the
2116 @code{setitimer} and @code{getitimer} functions to specify the virtual
2117 timer.
2119 @comment sys/time.h
2120 @comment BSD
2121 @item ITIMER_PROF
2122 @findex ITIMER_PROF
2123 This constant can be used as the @var{which} argument to the
2124 @code{setitimer} and @code{getitimer} functions to specify the profiling
2125 timer.
2126 @end table
2128 @comment unistd.h
2129 @comment POSIX.1
2130 @deftypefun {unsigned int} alarm (unsigned int @var{seconds})
2131 The @code{alarm} function sets the real-time timer to expire in
2132 @var{seconds} seconds.  If you want to cancel any existing alarm, you
2133 can do this by calling @code{alarm} with a @var{seconds} argument of
2134 zero.
2136 The return value indicates how many seconds remain before the previous
2137 alarm would have been sent.  If there is no previous alarm, @code{alarm}
2138 returns zero.
2139 @end deftypefun
2141 The @code{alarm} function could be defined in terms of @code{setitimer}
2142 like this:
2144 @smallexample
2145 unsigned int
2146 alarm (unsigned int seconds)
2148   struct itimerval old, new;
2149   new.it_interval.tv_usec = 0;
2150   new.it_interval.tv_sec = 0;
2151   new.it_value.tv_usec = 0;
2152   new.it_value.tv_sec = (long int) seconds;
2153   if (setitimer (ITIMER_REAL, &new, &old) < 0)
2154     return 0;
2155   else
2156     return old.it_value.tv_sec;
2158 @end smallexample
2160 There is an example showing the use of the @code{alarm} function in
2161 @ref{Handler Returns}.
2163 If you simply want your process to wait for a given number of seconds,
2164 you should use the @code{sleep} function.  @xref{Sleeping}.
2166 You shouldn't count on the signal arriving precisely when the timer
2167 expires.  In a multiprocessing environment there is typically some
2168 amount of delay involved.
2170 @strong{Portability Note:} The @code{setitimer} and @code{getitimer}
2171 functions are derived from BSD Unix, while the @code{alarm} function is
2172 specified by the POSIX.1 standard.  @code{setitimer} is more powerful than
2173 @code{alarm}, but @code{alarm} is more widely used.
2175 @node Sleeping
2176 @section Sleeping
2178 The function @code{sleep} gives a simple way to make the program wait
2179 for short periods of time.  If your program doesn't use signals (except
2180 to terminate), then you can expect @code{sleep} to wait reliably for
2181 the specified amount of time.  Otherwise, @code{sleep} can return sooner
2182 if a signal arrives; if you want to wait for a given period regardless
2183 of signals, use @code{select} (@pxref{Waiting for I/O}) and don't
2184 specify any descriptors to wait for.
2185 @c !!! select can get EINTR; using SA_RESTART makes sleep win too.
2187 @comment unistd.h
2188 @comment POSIX.1
2189 @deftypefun {unsigned int} sleep (unsigned int @var{seconds})
2190 The @code{sleep} function waits for @var{seconds} or until a signal
2191 is delivered, whichever happens first.
2193 If @code{sleep} function returns because the requested time has
2194 elapsed, it returns a value of zero.  If it returns because of delivery
2195 of a signal, its return value is the remaining time in the sleep period.
2197 The @code{sleep} function is declared in @file{unistd.h}.
2198 @end deftypefun
2200 Resist the temptation to implement a sleep for a fixed amount of time by
2201 using the return value of @code{sleep}, when nonzero, to call
2202 @code{sleep} again.  This will work with a certain amount of accuracy as
2203 long as signals arrive infrequently.  But each signal can cause the
2204 eventual wakeup time to be off by an additional second or so.  Suppose a
2205 few signals happen to arrive in rapid succession by bad luck---there is
2206 no limit on how much this could shorten or lengthen the wait.
2208 Instead, compute the time at which the program should stop waiting, and
2209 keep trying to wait until that time.  This won't be off by more than a
2210 second.  With just a little more work, you can use @code{select} and
2211 make the waiting period quite accurate.  (Of course, heavy system load
2212 can cause additional unavoidable delays---unless the machine is
2213 dedicated to one application, there is no way you can avoid this.)
2215 On some systems, @code{sleep} can do strange things if your program uses
2216 @code{SIGALRM} explicitly.  Even if @code{SIGALRM} signals are being
2217 ignored or blocked when @code{sleep} is called, @code{sleep} might
2218 return prematurely on delivery of a @code{SIGALRM} signal.  If you have
2219 established a handler for @code{SIGALRM} signals and a @code{SIGALRM}
2220 signal is delivered while the process is sleeping, the action taken
2221 might be just to cause @code{sleep} to return instead of invoking your
2222 handler.  And, if @code{sleep} is interrupted by delivery of a signal
2223 whose handler requests an alarm or alters the handling of @code{SIGALRM},
2224 this handler and @code{sleep} will interfere.
2226 On the GNU system, it is safe to use @code{sleep} and @code{SIGALRM} in
2227 the same program, because @code{sleep} does not work by means of
2228 @code{SIGALRM}.
2230 @comment time.h
2231 @comment POSIX.1
2232 @deftypefun int nanosleep (const struct timespec *@var{requested_time}, struct timespec *@var{remaining})
2233 If resolution to seconds is not enough the @code{nanosleep} function
2234 can be used.  As the name suggests the sleeping period can be specified
2235 in nanoseconds.  The actual period of waiting time might be longer since
2236 the requested time in the @var{requested_time} parameter is rounded up
2237 to the next integer multiple of the actual resolution of the system.
2239 If the function returns because the time has elapsed the return value is
2240 zero.  If the function return @math{-1} the global variable @var{errno}
2241 is set to the following values:
2243 @table @code
2244 @item EINTR
2245 The call was interrupted because a signal was delivered to the thread.
2246 If the @var{remaining} parameter is not the null pointer the structure
2247 pointed to by @var{remaining} is updated to contain the remaining time.
2249 @item EINVAL
2250 The nanosecond value in the @var{requested_time} parameter contains an
2251 illegal value.  Either the value is negative or greater than or equal to
2252 1000 million.
2253 @end table
2255 This function is a cancellation point in multi-threaded programs.  This
2256 is a problem if the thread allocates some resources (like memory, file
2257 descriptors, semaphores or whatever) at the time @code{nanosleep} is
2258 called.  If the thread gets canceled these resources stay allocated
2259 until the program ends.  To avoid this calls to @code{nanosleep} should
2260 be protected using cancellation handlers.
2261 @c ref pthread_cleanup_push / pthread_cleanup_pop
2263 The @code{nanosleep} function is declared in @file{time.h}.
2264 @end deftypefun
2266 @node Resource Usage
2267 @section Resource Usage
2269 @pindex sys/resource.h
2270 The function @code{getrusage} and the data type @code{struct rusage} are
2271 used to examine the resource usage of a process.  They are declared in
2272 @file{sys/resource.h}.
2274 @comment sys/resource.h
2275 @comment BSD
2276 @deftypefun int getrusage (int @var{processes}, struct rusage *@var{rusage})
2277 This function reports resource usage totals for processes specified by
2278 @var{processes}, storing the information in @code{*@var{rusage}}.
2280 In most systems, @var{processes} has only two valid values:
2282 @table @code
2283 @comment sys/resource.h
2284 @comment BSD
2285 @item RUSAGE_SELF
2286 Just the current process.
2288 @comment sys/resource.h
2289 @comment BSD
2290 @item RUSAGE_CHILDREN
2291 All child processes (direct and indirect) that have already terminated.
2292 @end table
2294 In the GNU system, you can also inquire about a particular child process
2295 by specifying its process ID.
2297 The return value of @code{getrusage} is zero for success, and @code{-1}
2298 for failure.
2300 @table @code
2301 @item EINVAL
2302 The argument @var{processes} is not valid.
2303 @end table
2304 @end deftypefun
2306 One way of getting resource usage for a particular child process is with
2307 the function @code{wait4}, which returns totals for a child when it
2308 terminates.  @xref{BSD Wait Functions}.
2310 @comment sys/resource.h
2311 @comment BSD
2312 @deftp {Data Type} {struct rusage}
2313 This data type stores various resource usage statistics.  It has the
2314 following members, and possibly others:
2316 @table @code
2317 @item struct timeval ru_utime
2318 Time spent executing user instructions.
2320 @item struct timeval ru_stime
2321 Time spent in operating system code on behalf of @var{processes}.
2323 @item long int ru_maxrss
2324 The maximum resident set size used, in kilobytes.  That is, the maximum
2325 number of kilobytes of physical memory that @var{processes} used
2326 simultaneously.
2328 @item long int ru_ixrss
2329 An integral value expressed in kilobytes times ticks of execution, which
2330 indicates the amount of memory used by text that was shared with other
2331 processes.
2333 @item long int ru_idrss
2334 An integral value expressed the same way, which is the amount of
2335 unshared memory used for data.
2337 @item long int ru_isrss
2338 An integral value expressed the same way, which is the amount of
2339 unshared memory used for stack space.
2341 @item long int ru_minflt
2342 The number of page faults which were serviced without requiring any I/O.
2344 @item long int ru_majflt
2345 The number of page faults which were serviced by doing I/O.
2347 @item long int ru_nswap
2348 The number of times @var{processes} was swapped entirely out of main memory.
2350 @item long int ru_inblock
2351 The number of times the file system had to read from the disk on behalf
2352 of @var{processes}.
2354 @item long int ru_oublock
2355 The number of times the file system had to write to the disk on behalf
2356 of @var{processes}.
2358 @item long int ru_msgsnd
2359 Number of IPC messages sent.
2361 @item long ru_msgrcv
2362 Number of IPC messages received.
2364 @item long int ru_nsignals
2365 Number of signals received.
2367 @item long int ru_nvcsw
2368 The number of times @var{processes} voluntarily invoked a context switch
2369 (usually to wait for some service).
2371 @item long int ru_nivcsw
2372 The number of times an involuntary context switch took place (because a
2373 time slice expired, or another process of higher priority was
2374 scheduled).
2375 @end table
2376 @end deftp
2378 An additional historical function for examining resource usage,
2379 @code{vtimes}, is supported but not documented here.  It is declared in
2380 @file{sys/vtimes.h}.
2382 @node Limits on Resources
2383 @section Limiting Resource Usage
2384 @cindex resource limits
2385 @cindex limits on resource usage
2386 @cindex usage limits
2388 You can specify limits for the resource usage of a process.  When the
2389 process tries to exceed a given limit, it may get a signal, or the system call
2390 by which it tried to do so may fail, depending on the limit in question.  Each
2391 process initially inherits its limit values from its parent, but it can
2392 subsequently change them.
2394 @pindex sys/resource.h
2395 The symbols in this section are defined in @file{sys/resource.h}.
2397 @comment sys/resource.h
2398 @comment BSD
2399 @deftypefun int getrlimit (int @var{resource}, struct rlimit *@var{rlp})
2400 Read the current value and the maximum value of resource @var{resource}
2401 and store them in @code{*@var{rlp}}.
2403 The return value is @code{0} on success and @code{-1} on failure.  The
2404 only possible @code{errno} error condition is @code{EFAULT}.
2406 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
2407 32-bit system, this function is in fact @code{getrlimit64}.  Thus the
2408 LFS interface transparently replaces the old interface.
2409 @end deftypefun
2411 @comment sys/resource.h
2412 @comment Unix98
2413 @deftypefun int getrlimit64 (int @var{resource}, struct rlimit64 *@var{rlp})
2414 This function is similar to @code{getrlimit}, but its second
2415 parameter is a pointer to a variable of type @code{struct rlimit64},
2416 allowing it to read values which wouldn't fit in the member
2417 of a @code{struct rlimit}.
2419 If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
2420 32-bit machine, this function is available under the name
2421 @code{getrlimit} and so transparently replaces the old interface.
2422 @end deftypefun
2424 @comment sys/resource.h
2425 @comment BSD
2426 @deftypefun int setrlimit (int @var{resource}, const struct rlimit *@var{rlp})
2427 Store the current value and the maximum value of resource @var{resource}
2428 in @code{*@var{rlp}}.
2430 The return value is @code{0} on success and @code{-1} on failure.  The
2431 following @code{errno} error condition is possible:
2433 @table @code
2434 @item EPERM
2435 You tried to change the maximum permissible limit value,
2436 but you don't have privileges to do so.
2437 @end table
2439 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
2440 32-bit system this function is in fact @code{setrlimit64}.  Thus the
2441 LFS interface transparently replaces the old interface.
2442 @end deftypefun
2444 @comment sys/resource.h
2445 @comment Unix98
2446 @deftypefun int setrlimit64 (int @var{resource}, const struct rlimit64 *@var{rlp})
2447 This function is similar to @code{setrlimit}, but its second parameter
2448 is a pointer to a variable of type @code{struct rlimit64}, allowing it
2449 to set values which wouldn't fit in the member of a @code{struct
2450 rlimit}.
2452 If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
2453 32-bit machine, this function is available under the name
2454 @code{setrlimit} and so transparently replaces the old interface.
2455 @end deftypefun
2457 @comment sys/resource.h
2458 @comment BSD
2459 @deftp {Data Type} {struct rlimit}
2460 This structure is used with @code{getrlimit} to receive limit values,
2461 and with @code{setrlimit} to specify limit values.  It has two fields:
2463 @table @code
2464 @item rlim_t rlim_cur
2465 The current value of the limit in question.
2466 This is also called the ``soft limit''.
2467 @cindex soft limit
2469 @item rlim_t rlim_max
2470 The maximum permissible value of the limit in question.  You cannot set
2471 the current value of the limit to a larger number than this maximum.
2472 Only the super-user can change the maximum permissible value.
2473 This is also called the ``hard limit''.
2474 @cindex hard limit
2475 @end table
2477 For @code{getrlimit}, the structure is an output; it receives the current
2478 value.  With @code{setrlimit} it specifies the new value.
2479 @end deftp
2481 For the LFS functions a similar type is defined in @file{sys/resource.h}.
2483 @comment sys/resource.h
2484 @comment Unix98
2485 @deftp {Data Type} {struct rlimit64}
2486 This structure is used with @code{getrlimit64} to receive limit values,
2487 and with @code{setrlimit64} to specify limit values.  It has two fields:
2489 @table @code
2490 @item rlim64_t rlim_cur
2491 The current value of the limit in question.
2492 This is also called the ``soft limit''.
2494 @item rlim64_t rlim_max
2495 The maximum permissible value of the limit in question.  You cannot set
2496 the current value of the limit to a larger number than this maximum.
2497 Only the super-user can change the maximum permissible value.
2498 This is also called the ``hard limit''.
2499 @end table
2501 For @code{getrlimit64}, the structure is an output; it receives the current
2502 value.  With @code{setrlimit64} it specifies the new value.
2503 @end deftp
2505 Here is a list of resources that you can specify a limit for.
2506 Memory sizes are measured in bytes.
2508 @table @code
2509 @comment sys/resource.h
2510 @comment BSD
2511 @item RLIMIT_CPU
2512 @vindex RLIMIT_CPU
2513 The maximum amount of CPU time the process can use.  If it runs for
2514 longer than this, it gets a signal: @code{SIGXCPU}.  The value is
2515 measured in seconds.  @xref{Operation Error Signals}.
2517 @comment sys/resource.h
2518 @comment BSD
2519 @item RLIMIT_FSIZE
2520 @vindex RLIMIT_FSIZE
2521 The maximum size of file the process can create.  Trying to write a
2522 larger file causes a signal: @code{SIGXFSZ}.  @xref{Operation Error
2523 Signals}.
2525 @comment sys/resource.h
2526 @comment BSD
2527 @item RLIMIT_DATA
2528 @vindex RLIMIT_DATA
2529 The maximum size of data memory for the process.  If the process tries
2530 to allocate data memory beyond this amount, the allocation function
2531 fails.
2533 @comment sys/resource.h
2534 @comment BSD
2535 @item RLIMIT_STACK
2536 @vindex RLIMIT_STACK
2537 The maximum stack size for the process.  If the process tries to extend
2538 its stack past this size, it gets a @code{SIGSEGV} signal.
2539 @xref{Program Error Signals}.
2541 @comment sys/resource.h
2542 @comment BSD
2543 @item RLIMIT_CORE
2544 @vindex RLIMIT_CORE
2545 The maximum size core file that this process can create.  If the process
2546 terminates and would dump a core file larger than this,
2547 then no core file is created.  So setting this limit to zero prevents
2548 core files from ever being created.
2550 @comment sys/resource.h
2551 @comment BSD
2552 @item RLIMIT_RSS
2553 @vindex RLIMIT_RSS
2554 The maximum amount of physical memory that this process should get.
2555 This parameter is a guide for the system's scheduler and memory
2556 allocator; the system may give the process more memory when there is a
2557 surplus.
2559 @comment sys/resource.h
2560 @comment BSD
2561 @item RLIMIT_MEMLOCK
2562 The maximum amount of memory that can be locked into physical memory (so
2563 it will never be paged out).
2565 @comment sys/resource.h
2566 @comment BSD
2567 @item RLIMIT_NPROC
2568 The maximum number of processes that can be created with the same user ID.
2569 If you have reached the limit for your user ID, @code{fork} will fail
2570 with @code{EAGAIN}.  @xref{Creating a Process}.
2572 @comment sys/resource.h
2573 @comment BSD
2574 @item RLIMIT_NOFILE
2575 @vindex RLIMIT_NOFILE
2576 @itemx RLIMIT_OFILE
2577 @vindex RLIMIT_OFILE
2578 The maximum number of files that the process can open.  If it tries to
2579 open more files than this, it gets the error code @code{EMFILE}.
2580 @xref{Error Codes}.  Not all systems support this limit; GNU does, and
2581 4.4 BSD does.
2583 @comment sys/resource.h
2584 @comment Unix98
2585 @item RLIMIT_AS
2586 @vindex RLIMIT_AS
2587 The maximum size of total memory that this process should get.  If the
2588 process tries to allocate more memory beyond this amount with, for
2589 example, @code{brk}, @code{malloc}, @code{mmap} or @code{sbrk}, the
2590 allocation function fails.
2592 @comment sys/resource.h
2593 @comment BSD
2594 @item RLIM_NLIMITS
2595 @vindex RLIM_NLIMITS
2596 The number of different resource limits.  Any valid @var{resource}
2597 operand must be less than @code{RLIM_NLIMITS}.
2598 @end table
2600 @comment sys/resource.h
2601 @comment BSD
2602 @deftypevr Constant int RLIM_INFINITY
2603 This constant stands for a value of ``infinity'' when supplied as
2604 the limit value in @code{setrlimit}.
2605 @end deftypevr
2607 @c ??? Someone want to finish these?
2608 Two historical functions for setting resource limits, @code{ulimit} and
2609 @code{vlimit}, are not documented here.  The latter is declared in
2610 @file{sys/vlimit.h} and comes from BSD.
2612 @node Priority
2613 @section Process Priority
2614 @cindex process priority
2615 @cindex priority of a process
2617 @pindex sys/resource.h
2618 When several processes try to run, their respective priorities determine
2619 what share of the CPU each process gets.  This section describes how you
2620 can read and set the priority of a process.  All these functions and
2621 macros are declared in @file{sys/resource.h}.
2623 The range of valid priority values depends on the operating system, but
2624 typically it runs from @code{-20} to @code{20}.  A lower priority value
2625 means the process runs more often.  These constants describe the range of
2626 priority values:
2628 @table @code
2629 @comment sys/resource.h
2630 @comment BSD
2631 @item PRIO_MIN
2632 @vindex PRIO_MIN
2633 The smallest valid priority value.
2635 @comment sys/resource.h
2636 @comment BSD
2637 @item PRIO_MAX
2638 @vindex PRIO_MAX
2639 The largest valid priority value.
2640 @end table
2642 @comment sys/resource.h
2643 @comment BSD
2644 @deftypefun int getpriority (int @var{class}, int @var{id})
2645 Read the priority of a class of processes; @var{class} and @var{id}
2646 specify which ones (see below).  If the processes specified do not all
2647 have the same priority, this returns the smallest value that any of them
2648 has.
2650 The return value is the priority value on success, and @code{-1} on
2651 failure.  The following @code{errno} error condition are possible for
2652 this function:
2654 @table @code
2655 @item ESRCH
2656 The combination of @var{class} and @var{id} does not match any existing
2657 process.
2659 @item EINVAL
2660 The value of @var{class} is not valid.
2661 @end table
2663 If the return value is @code{-1}, it could indicate failure, or it
2664 could be the priority value.  The only way to make certain is to set
2665 @code{errno = 0} before calling @code{getpriority}, then use @code{errno
2666 != 0} afterward as the criterion for failure.
2667 @end deftypefun
2669 @comment sys/resource.h
2670 @comment BSD
2671 @deftypefun int setpriority (int @var{class}, int @var{id}, int @var{priority})
2672 Set the priority of a class of processes to @var{priority}; @var{class}
2673 and @var{id} specify which ones (see below).
2675 The return value is @code{0} on success and @code{-1} on failure.  The
2676 following @code{errno} error condition are defined for this function:
2678 @table @code
2679 @item ESRCH
2680 The combination of @var{class} and @var{id} does not match any existing
2681 process.
2683 @item EINVAL
2684 The value of @var{class} is not valid.
2686 @item EPERM
2687 You tried to set the priority of some other user's process, and you
2688 don't have privileges for that.
2690 @item EACCES
2691 You tried to lower the priority of a process, and you don't have
2692 privileges for that.
2693 @end table
2694 @end deftypefun
2696 The arguments @var{class} and @var{id} together specify a set of
2697 processes you are interested in.  These are the possible values of
2698 @var{class}:
2700 @table @code
2701 @comment sys/resource.h
2702 @comment BSD
2703 @item PRIO_PROCESS
2704 @vindex PRIO_PROCESS
2705 Read or set the priority of one process.  The argument @var{id} is a
2706 process ID.
2708 @comment sys/resource.h
2709 @comment BSD
2710 @item PRIO_PGRP
2711 @vindex PRIO_PGRP
2712 Read or set the priority of one process group.  The argument @var{id} is
2713 a process group ID.
2715 @comment sys/resource.h
2716 @comment BSD
2717 @item PRIO_USER
2718 @vindex PRIO_USER
2719 Read or set the priority of one user's processes.  The argument @var{id}
2720 is a user ID.
2721 @end table
2723 If the argument @var{id} is 0, it stands for the current process,
2724 current process group, or the current user, according to @var{class}.
2726 @c ??? I don't know where we should say this comes from.
2727 @comment Unix
2728 @comment dunno.h
2729 @deftypefun int nice (int @var{increment})
2730 Increment the priority of the current process by @var{increment}.
2731 The return value is the same as for @code{setpriority}.
2733 Here is an equivalent definition of @code{nice}:
2735 @smallexample
2737 nice (int increment)
2739   int old = getpriority (PRIO_PROCESS, 0);
2740   return setpriority (PRIO_PROCESS, 0, old + increment);
2742 @end smallexample
2743 @end deftypefun