]> git.ipfire.org Git - thirdparty/glibc.git/blob - manual/time.texi
Update.
[thirdparty/glibc.git] / manual / time.texi
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
4
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.
8
9 The time functions fall into three main categories:
10
11 @itemize @bullet
12 @item
13 Functions for measuring elapsed CPU time are discussed in @ref{Processor
14 Time}.
15
16 @item
17 Functions for measuring absolute clock or calendar time are discussed in
18 @ref{Calendar Time}.
19
20 @item
21 Functions for setting alarms and timers are discussed in @ref{Setting
22 an Alarm}.
23 @end itemize
24
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
36
37 @node Processor Time
38 @section Processor Time
39
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
53
54 @menu
55 * Basic CPU Time:: The @code{clock} function.
56 * Detailed CPU Time:: The @code{times} function.
57 @end menu
58
59 @node Basic CPU Time
60 @subsection Basic CPU Time Inquiry
61
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
66
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:
70
71 @smallexample
72 @group
73 #include <time.h>
74
75 clock_t start, end;
76 double elapsed;
77
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
84
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.
89
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.
97
98 Note that the clock can wrap around. On a 32bit system with
99 @code{CLOCKS_PER_SEC} set to one million a wrap around happens after
100 around 36 minutes.
101
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
109
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
115
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
122
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
131
132
133 @node Detailed CPU Time
134 @subsection Detailed Elapsed CPU Time Inquiry
135
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
140
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:
146
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.
151
152 @item clock_t tms_stime
153 This is the CPU time used by the system on behalf of the calling process.
154
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}.
164
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
170
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
174
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}.
180
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
186
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}.
193
194 @node Calendar Time
195 @section Calendar Time
196
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
202
203 There are three representations for date and time information:
204
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
211
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
218
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
228
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
241
242 @node Simple Calendar Time
243 @subsection Simple Calendar Time
244
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
249
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}).
261
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
266
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.
274
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
279
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
288
289
290 @node High-Resolution Calendar
291 @subsection High-Resolution Calendar
292
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.
295
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
301
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:
307
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.
312
313 @item long int tv_usec
314 This is the fractional second value, represented as the number of
315 microseconds.
316
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
322
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:
328
329 @table @code
330 @item int tz_minuteswest
331 This is the number of minutes west of UTC.
332
333 @item int tz_dsttime
334 If nonzero, Daylight Saving Time applies during some part of the year.
335 @end table
336
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
340
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.
345
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.} */
350
351 int
352 timeval_subtract (result, x, y)
353 struct timeval *result, *x, *y;
354 @{
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 @}
366
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;
371
372 /* @r{Return 1 if result is negative.} */
373 return x->tv_sec < y->tv_sec;
374 @}
375 @end smallexample
376
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.
384
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:
387
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
397
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.
404
405 You must be a privileged user in order to use @code{settimeofday}.
406
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:
409
410 @table @code
411 @item EPERM
412 This process cannot set the time because it is not privileged.
413
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
419
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.
427
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.
432
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.
436
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:
441
442 @table @code
443 @item EPERM
444 You do not have privilege to set the time.
445 @end table
446 @end deftypefun
447
448 @strong{Portability Note:} The @code{gettimeofday}, @code{settimeofday},
449 and @code{adjtime} functions are derived from BSD.
450
451
452 @node Broken-down Time
453 @subsection Broken-down Time
454 @cindex broken-down time
455 @cindex calendar time and broken-down time
456
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.
463
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.
466
467 The symbols in this section are declared in the header file @file{time.h}.
468
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:
474
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
481
482 @item int tm_min
483 This is the number of minutes after the hour, in the range @code{0} through
484 @code{59}.
485
486 @item int tm_hour
487 This is the number of hours past midnight, in the range @code{0} through
488 @code{23}.
489
490 @item int tm_mday
491 This is the day of the month, in the range @code{1} through @code{31}.
492
493 @item int tm_mon
494 This is the number of months since January, in the range @code{0} through
495 @code{11}.
496
497 @item int tm_year
498 This is the number of years since @code{1900}.
499
500 @item int tm_wday
501 This is the number of days since Sunday, in the range @code{0} through
502 @code{6}.
503
504 @item int tm_yday
505 This is the number of days since January 1, in the range @code{0} through
506 @code{365}.
507
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.
515
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.
524
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
531
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.
538
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.)
543
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}.
547
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
552
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.
556
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.
563
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.
567
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
571
572
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.
579
580 Recall that calendar times are @emph{always} expressed in coordinated
581 universal time.
582 @end deftypefun
583
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}.
587
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.
593
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
597
598
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.
606
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}).
614
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}.
618
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
622
623 @node Formatting Date and Time
624 @subsection Formatting Date and Time
625
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
629
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:
635
636 @smallexample
637 "Tue May 21 13:46:22 1991\n"
638 @end smallexample
639
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}.
642
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}.
646
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
652
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.
660
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
665
666
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
673
674 @smallexample
675 asctime (localtime (@var{time}))
676 @end smallexample
677
678 @code{ctime} sets the variable @code{tzname}, because @code{localtime}
679 does so. @xref{Time Zone Functions}.
680 @end deftypefun
681
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}):
688
689 @smallexample
690 (@{ struct tm tm; asctime_r (localtime_r (time, &tm), buf); @})
691 @end smallexample
692
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
697
698
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}).
707
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:
714
715 @table @code
716 @item _
717 The number is padded with spaces.
718
719 @item -
720 The number is not padded at all.
721
722 @item 0
723 The number is padded with zeros even if the format specifies padding
724 with spaces.
725
726 @item ^
727 The output uses uppercase characters, but only if this is possible
728 (@pxref{Case Conversion}).
729 @end table
730
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.
734
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.
740
741 An optional modifier can follow the optional flag and width
742 specification. The modifiers, which are POSIX.2 extensions, are:
743
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.
751
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
756
757 If the format supports the modifier but no alternate representation
758 is available, it is ignored.
759
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:
763
764 @table @code
765 @item %a
766 The abbreviated weekday name according to the current locale.
767
768 @item %A
769 The full weekday name according to the current locale.
770
771 @item %b
772 The abbreviated month name according to the current locale.
773
774 @item %B
775 The full month name according to the current locale.
776
777 @item %c
778 The preferred date and time representation for the current locale.
779
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.
783
784 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
785
786 @item %d
787 The day of the month as a decimal number (range @code{01} through @code{31}).
788
789 @item %D
790 The date using the format @code{%m/%d/%y}.
791
792 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
793
794 @item %e
795 The day of the month like with @code{%d}, but padded with blank (range
796 @code{ 1} through @code{31}).
797
798 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
799
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.
803
804 This format is a @w{ISO C99} extension.
805
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.
811
812 This format was introduced in @w{ISO C99}.
813
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.
819
820 This format was introduced in @w{ISO C99} but was previously available
821 as a GNU extension.
822
823 @item %h
824 The abbreviated month name according to the current locale. The action
825 is the same as for @code{%b}.
826
827 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
828
829 @item %H
830 The hour as a decimal number, using a 24-hour clock (range @code{00} through
831 @code{23}).
832
833 @item %I
834 The hour as a decimal number, using a 12-hour clock (range @code{01} through
835 @code{12}).
836
837 @item %j
838 The day of the year as a decimal number (range @code{001} through @code{366}).
839
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}).
843
844 This format is a GNU extension.
845
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}).
849
850 This format is a GNU extension.
851
852 @item %m
853 The month as a decimal number (range @code{01} through @code{12}).
854
855 @item %M
856 The minute as a decimal number (range @code{00} through @code{59}).
857
858 @item %n
859 A single @samp{\n} (newline) character.
860
861 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
862
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}.
867
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}.
876
877 This format was introduced in @w{ISO C99} but was previously available
878 as a GNU extension.
879
880 @item %r
881 The complete time using the AM/PM format of the current locale.
882
883 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
884
885 @item %R
886 The hour and minute in decimal numbers using the format @code{%H:%M}.
887
888 This format was introduced in @w{ISO C99} but was previously available
889 as a GNU extension.
890
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.
894
895 This format is a GNU extension.
896
897 @item %S
898 The seconds as a decimal number (range @code{00} through @code{60}).
899
900 @item %t
901 A single @samp{\t} (tabulator) character.
902
903 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
904
905 @item %T
906 The time using decimal numbers using the format @code{%H:%M:%S}.
907
908 This format is a POSIX.2 extension.
909
910 @item %u
911 The day of the week as a decimal number (range @code{1} through
912 @code{7}), Monday being @code{1}.
913
914 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
915
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}.
921
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.
932
933 This format is a POSIX.2 extension and also appears in @w{ISO C99}.
934
935 @item %w
936 The day of the week as a decimal number (range @code{0} through
937 @code{6}), Sunday being @code{0}.
938
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}.
944
945 @item %x
946 The preferred date representation for the current locale, but without the
947 time.
948
949 @item %X
950 The preferred time representation for the current locale, but with no date.
951
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.
955
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.
959
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.
964
965 This format was introduced in @w{ISO C99} but was previously available
966 as a GNU extension.
967
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"}}).
971
972 @item %Z
973 The time zone abbreviation (empty if the time zone can't be determined).
974
975 @item %%
976 A literal @samp{%} character.
977 @end table
978
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.
986
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:
996
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
1006
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.
1009
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.
1013
1014 For an example of @code{strftime}, see @ref{Time Functions Example}.
1015 @end deftypefun
1016
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.
1026
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.
1032
1033 The @code{wcsftime} function supports the same flags, modifiers, and
1034 format specifiers as the @code{strftime} function.
1035
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
1041
1042 @node Parsing Date and Time
1043 @subsection Convert textual time and date information back
1044
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.
1052
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
1058
1059 @node Low-Level Time String Parsing
1060 @subsubsection Interpret string according to given format
1061
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}.
1066
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}.
1073
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.
1079
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.
1087
1088 The modifiers @code{E} and @code{O} are also allowed everywhere the
1089 @code{strftime} function allows them.
1090
1091 The formats are:
1092
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.
1098
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.
1104
1105 @item %c
1106 The date and time representation for the current locale.
1107
1108 @item %Ec
1109 Like @code{%c} but the locale's alternative date and time format is used.
1110
1111 @item %C
1112 The century of the year.
1113
1114 It makes sense to use this format only if the format string also
1115 contains the @code{%y} format.
1116
1117 @item %EC
1118 The locale's representation of the period.
1119
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.
1123
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.
1128
1129 @item %Od
1130 @itemx %Oe
1131 Same as @code{%d} but using the locale's alternative numeric symbols.
1132
1133 Leading zeroes are permitted but not required.
1134
1135 @item %D
1136 Equivalent to @code{%m/%d/%y}.
1137
1138 @item %F
1139 Equivalent to @code{%Y-%m-%d}, which is the @w{ISO 8601} date
1140 format.
1141
1142 This is a GNU extension following an @w{ISO C99} extension to
1143 @code{strftime}.
1144
1145 @item %g
1146 The year corresponding to the ISO week number, but without the century
1147 (range @code{00} through @code{99}).
1148
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.
1151
1152 This format is a GNU extension following a GNU extension of @code{strftime}.
1153
1154 @item %G
1155 The year corresponding to the ISO week number.
1156
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.
1159
1160 This format is a GNU extension following a GNU extension of @code{strftime}.
1161
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}).
1166
1167 @code{%k} is a GNU extension following a GNU extension of @code{strftime}.
1168
1169 @item %OH
1170 Same as @code{%H} but using the locale's alternative numeric symbols.
1171
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}).
1176
1177 @code{%l} is a GNU extension following a GNU extension of @code{strftime}.
1178
1179 @item %OI
1180 Same as @code{%I} but using the locale's alternative numeric symbols.
1181
1182 @item %j
1183 The day of the year as a decimal number (range @code{1} through @code{366}).
1184
1185 Leading zeroes are permitted but not required.
1186
1187 @item %m
1188 The month as a decimal number (range @code{1} through @code{12}).
1189
1190 Leading zeroes are permitted but not required.
1191
1192 @item %Om
1193 Same as @code{%m} but using the locale's alternative numeric symbols.
1194
1195 @item %M
1196 The minute as a decimal number (range @code{0} through @code{59}).
1197
1198 Leading zeroes are permitted but not required.
1199
1200 @item %OM
1201 Same as @code{%M} but using the locale's alternative numeric symbols.
1202
1203 @item %n
1204 @itemx %t
1205 Matches any white space.
1206
1207 @item %p
1208 @item %P
1209 The locale-dependent equivalent to @samp{AM} or @samp{PM}.
1210
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.
1214
1215 @code{%P} is a GNU extension following a GNU extension to @code{strftime}.
1216
1217 @item %r
1218 The complete time using the AM/PM format of the current locale.
1219
1220 A complication is that the locale might not define this format at all
1221 and therefore the conversion fails.
1222
1223 @item %R
1224 The hour and minute in decimal numbers using the format @code{%H:%M}.
1225
1226 @code{%R} is a GNU extension following a GNU extension to @code{strftime}.
1227
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.
1231
1232 @code{%s} is a GNU extension following a GNU extension to @code{strftime}.
1233
1234 @item %S
1235 The seconds as a decimal number (range @code{0} through @code{61}).
1236
1237 Leading zeroes are permitted but not required.
1238
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.
1242
1243 @item %OS
1244 Same as @code{%S} but using the locale's alternative numeric symbols.
1245
1246 @item %T
1247 Equivalent to the use of @code{%H:%M:%S} in this place.
1248
1249 @item %u
1250 The day of the week as a decimal number (range @code{1} through
1251 @code{7}), Monday being @code{1}.
1252
1253 Leading zeroes are permitted but not required.
1254
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.
1257
1258 @item %U
1259 The week number of the current year as a decimal number (range @code{0}
1260 through @code{53}).
1261
1262 Leading zeroes are permitted but not required.
1263
1264 @item %OU
1265 Same as @code{%U} but using the locale's alternative numeric symbols.
1266
1267 @item %V
1268 The @w{ISO 8601:1988} week number as a decimal number (range @code{1}
1269 through @code{53}).
1270
1271 Leading zeroes are permitted but not required.
1272
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.
1275
1276 @item %w
1277 The day of the week as a decimal number (range @code{0} through
1278 @code{6}), Sunday being @code{0}.
1279
1280 Leading zeroes are permitted but not required.
1281
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.
1284
1285 @item %Ow
1286 Same as @code{%w} but using the locale's alternative numeric symbols.
1287
1288 @item %W
1289 The week number of the current year as a decimal number (range @code{0}
1290 through @code{53}).
1291
1292 Leading zeroes are permitted but not required.
1293
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.
1296
1297 @item %OW
1298 Same as @code{%W} but using the locale's alternative numeric symbols.
1299
1300 @item %x
1301 The date using the locale's date format.
1302
1303 @item %Ex
1304 Like @code{%x} but the locale's alternative data representation is used.
1305
1306 @item %X
1307 The time using the locale's time format.
1308
1309 @item %EX
1310 Like @code{%X} but the locale's alternative time representation is used.
1311
1312 @item %y
1313 The year without a century as a decimal number (range @code{0} through
1314 @code{99}).
1315
1316 Leading zeroes are permitted but not required.
1317
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.
1324
1325 Therefore it is best to avoid @code{%y} completely and use @code{%Y}
1326 instead.
1327
1328 @item %Ey
1329 The offset from @code{%EC} in the locale's alternative representation.
1330
1331 @item %Oy
1332 The offset of the year (from @code{%C}) using the locale's alternative
1333 numeric symbols.
1334
1335 @item %Y
1336 The year as a decimal number, using the Gregorian calendar.
1337
1338 @item %EY
1339 The full alternative year representation.
1340
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.
1344
1345 @item %Z
1346 The timezone name.
1347
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.
1350
1351 @item %%
1352 A literal @samp{%} character.
1353 @end table
1354
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.
1358
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.
1364
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
1373
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.
1379
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:
1384
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.
1393
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.
1396
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
1404
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:
1407
1408 @smallexample
1409 const char *
1410 parse_date (const char *input, struct tm *tm)
1411 @{
1412 const char *cp;
1413
1414 /* @r{First clear the result structure.} */
1415 memset (tm, '\0', sizeof (*tm));
1416
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 @}
1424
1425 return cp;
1426 @}
1427 @end smallexample
1428
1429 @node General Time String Parsing
1430 @subsubsection A More User-friendly Way to Parse Times and Dates
1431
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).
1438
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:
1444
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
1467
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.
1474
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}.
1480
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.
1484
1485 Elements not initialized through the format string retain the values
1486 present at the time of the @code{getdate} function call.
1487
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:
1491
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.
1497
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.
1503
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.
1508
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.
1514
1515 @item
1516 The current hour, minute, and second are used if the appropriate value is
1517 not set through the format.
1518
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
1523
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):
1527
1528 @smallexample
1529 %m
1530 %A %B %d, %Y %H:%M:%S
1531 %A
1532 %B
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
1539
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.
1544
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
1562
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.
1567
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.
1571
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
1578
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.
1587
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.
1591
1592 This function is not defined in the Unix standard. Nevertheless it is
1593 available on some other Unix systems as well.
1594
1595 The warning against using @code{getdate} in SUID-programs applies to
1596 @code{getdate_r} as well.
1597 @end deftypefun
1598
1599 @node TZ Variable
1600 @subsection Specifying the Time Zone with @code{TZ}
1601
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
1608
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.
1614
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.
1624
1625 The first format is used when there is no Daylight Saving Time (or
1626 summer time) in the local time zone:
1627
1628 @smallexample
1629 @r{@var{std} @var{offset}}
1630 @end smallexample
1631
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.
1637
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}.
1644
1645 For example, here is how we would specify Eastern Standard Time, but
1646 without any Daylight Saving Time alternative:
1647
1648 @smallexample
1649 EST+5
1650 @end smallexample
1651
1652 The second format is used when there is Daylight Saving Time:
1653
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
1657
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.
1662
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:
1667
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.
1672
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.
1676
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
1685
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}.
1689
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.
1696
1697 @smallexample
1698 EST+5EDT,M4.1.0/2,M10.5.0/2
1699 @end smallexample
1700
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).
1710
1711 The third format looks like this:
1712
1713 @smallexample
1714 :@var{characters}
1715 @end smallexample
1716
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.
1720
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.
1730
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.
1746
1747 @node Time Zone Functions
1748 @subsection Functions and Variables for Time Zones
1749
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.
1761
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.
1768
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.
1773
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.
1777
1778 @end deftypevar
1779
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
1789
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.
1793
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
1805
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
1814
1815 @node Time Functions Example
1816 @subsection Time Functions Example
1817
1818 Here is an example program showing the use of some of the local time and
1819 calendar time functions.
1820
1821 @smallexample
1822 @include strftim.c.texi
1823 @end smallexample
1824
1825 It produces output like this:
1826
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
1832
1833
1834 @node Precision Time
1835 @section Precision Time
1836
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}.
1842
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}.
1851
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.
1856
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
1863
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.
1872
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:
1875
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
1883
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_}.
1893
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}.
1899
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}.
1906
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.
1912
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}.
1916
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.
1922
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}.
1927
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.
1931
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.
1936
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.
1942
1943 @item long int jitter
1944 This value expresses a median filtered average of the PPS signal's
1945 dispersion in microseconds.
1946
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}.
1950
1951 @item long int stabil
1952 This value represents the median filtered dispersion of the PPS
1953 frequency in scaled PPM.
1954
1955 @item long int jitcnt
1956 This counter represents the number of pulses where the jitter exceeded
1957 the allowed maximum @code{MAXTIME}.
1958
1959 @item long int calcnt
1960 This counter reflects the number of successful calibration intervals.
1961
1962 @item long int errcnt
1963 This counter represents the number of calibration errors (caused by
1964 large offsets or jitter).
1965
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
1971
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.
1980
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:
1983
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
1991
1992 For more details see RFC1305 (Network Time Protocol, Version 3) and
1993 related documents.
1994 @end deftypefun
1995
1996
1997 @node Setting an Alarm
1998 @section Setting an Alarm
1999
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.
2003
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:
2009
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
2016
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
2022
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
2029
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
2035
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.
2039
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}.
2046
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
2053
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.
2063
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
2068
2069 The @code{struct timeval} data type is described in @ref{High-Resolution
2070 Calendar}.
2071 @end deftp
2072
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}.
2079
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.
2083
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:
2086
2087 @table @code
2088 @item EINVAL
2089 The timer interval was too large.
2090 @end table
2091 @end deftypefun
2092
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}.
2098
2099 The return value and error conditions are the same as for @code{setitimer}.
2100 @end deftypefun
2101
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.
2110
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.
2118
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
2127
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.
2135
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
2140
2141 The @code{alarm} function could be defined in terms of @code{setitimer}
2142 like this:
2143
2144 @smallexample
2145 unsigned int
2146 alarm (unsigned int seconds)
2147 @{
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;
2157 @}
2158 @end smallexample
2159
2160 There is an example showing the use of the @code{alarm} function in
2161 @ref{Handler Returns}.
2162
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}.
2165
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.
2169
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.
2174
2175 @node Sleeping
2176 @section Sleeping
2177
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.
2186
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.
2192
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.
2196
2197 The @code{sleep} function is declared in @file{unistd.h}.
2198 @end deftypefun
2199
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.
2207
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.)
2214
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.
2225
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}.
2229
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.
2238
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:
2242
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.
2248
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
2254
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
2262
2263 The @code{nanosleep} function is declared in @file{time.h}.
2264 @end deftypefun
2265
2266 @node Resource Usage
2267 @section Resource Usage
2268
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}.
2273
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}}.
2279
2280 In most systems, @var{processes} has only two valid values:
2281
2282 @table @code
2283 @comment sys/resource.h
2284 @comment BSD
2285 @item RUSAGE_SELF
2286 Just the current process.
2287
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
2293
2294 In the GNU system, you can also inquire about a particular child process
2295 by specifying its process ID.
2296
2297 The return value of @code{getrusage} is zero for success, and @code{-1}
2298 for failure.
2299
2300 @table @code
2301 @item EINVAL
2302 The argument @var{processes} is not valid.
2303 @end table
2304 @end deftypefun
2305
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}.
2309
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:
2315
2316 @table @code
2317 @item struct timeval ru_utime
2318 Time spent executing user instructions.
2319
2320 @item struct timeval ru_stime
2321 Time spent in operating system code on behalf of @var{processes}.
2322
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.
2327
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.
2332
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.
2336
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.
2340
2341 @item long int ru_minflt
2342 The number of page faults which were serviced without requiring any I/O.
2343
2344 @item long int ru_majflt
2345 The number of page faults which were serviced by doing I/O.
2346
2347 @item long int ru_nswap
2348 The number of times @var{processes} was swapped entirely out of main memory.
2349
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}.
2353
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}.
2357
2358 @item long int ru_msgsnd
2359 Number of IPC messages sent.
2360
2361 @item long ru_msgrcv
2362 Number of IPC messages received.
2363
2364 @item long int ru_nsignals
2365 Number of signals received.
2366
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).
2370
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
2377
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}.
2381
2382 @node Limits on Resources
2383 @section Limiting Resource Usage
2384 @cindex resource limits
2385 @cindex limits on resource usage
2386 @cindex usage limits
2387
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.
2393
2394 @pindex sys/resource.h
2395 The symbols in this section are defined in @file{sys/resource.h}.
2396
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}}.
2402
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}.
2405
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
2410
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}.
2418
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
2423
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}}.
2429
2430 The return value is @code{0} on success and @code{-1} on failure. The
2431 following @code{errno} error condition is possible:
2432
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
2438
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
2443
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}.
2451
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
2456
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:
2462
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
2468
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
2476
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
2480
2481 For the LFS functions a similar type is defined in @file{sys/resource.h}.
2482
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:
2488
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''.
2493
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
2500
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
2504
2505 Here is a list of resources that you can specify a limit for.
2506 Memory sizes are measured in bytes.
2507
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}.
2516
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}.
2524
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.
2532
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}.
2540
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.
2549
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.
2558
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).
2564
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}.
2571
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.
2582
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.
2591
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
2599
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
2606
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.
2611
2612 @node Priority
2613 @section Process Priority
2614 @cindex process priority
2615 @cindex priority of a process
2616
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}.
2622
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:
2627
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.
2634
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
2641
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.
2649
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:
2653
2654 @table @code
2655 @item ESRCH
2656 The combination of @var{class} and @var{id} does not match any existing
2657 process.
2658
2659 @item EINVAL
2660 The value of @var{class} is not valid.
2661 @end table
2662
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
2668
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).
2674
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:
2677
2678 @table @code
2679 @item ESRCH
2680 The combination of @var{class} and @var{id} does not match any existing
2681 process.
2682
2683 @item EINVAL
2684 The value of @var{class} is not valid.
2685
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.
2689
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
2695
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}:
2699
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.
2707
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.
2714
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
2722
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}.
2725
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}.
2732
2733 Here is an equivalent definition of @code{nice}:
2734
2735 @smallexample
2736 int
2737 nice (int increment)
2738 @{
2739 int old = getpriority (PRIO_PROCESS, 0);
2740 return setpriority (PRIO_PROCESS, 0, old + increment);
2741 @}
2742 @end smallexample
2743 @end deftypefun