![]() Chapter Contents  | 
![]() Previous  | 
![]() Next  | 
| times | 
| Portability: | POSIX.1 conforming, UNIX compatible | 
| SYNOPSIS | |
| DESCRIPTION | |
| RETURN VALUE | |
| EXAMPLE | |
| RELATED FUNCTIONS | 
| SYNOPSIS | 
#include <time.h> clock_t times(struct tms *buffer);
| DESCRIPTION | 
times
 stores user and system CPU time for a process and its children.
The time information is stored in a 
tms
 structure located at the address pointed to by 
buffer
. The 
tms
 structure contains the following members:
clock_t
tms_utime
clock_t
tms_stime
clock_t
tms_cutime
tms_utime
 and 
tms_cutime
 values for all child processes that have terminated.
clock_t
tms_cstime
tms_stime
 and 
tms_cstime
 values for all child processes that have terminated.
The 
clock_t
 type measures
time in clock ticks. The amount of time represented
by each clock tick is determined by the 
CLK_TCK
 symbol, which is defined in 
time.h
.
| RETURN VALUE | 
If successful, 
times
 returns a positive value representing elapsed time, and 
((clock_t) -1)
 if it is unsuccessful.
The elapsed time value is referenced from an arbitrary point; hence, it is
only useful when making more than one call to 
times
.
Note:   
USS computes elapsed time values
using fullword (long) arithmetic. If this computation overflows, 
times
 indicates an error and sets 
errno
 to 
ERANGE
.  ![[cautionend]](../common/images/cautend.gif)
| EXAMPLE | 
The following example illustrates the
use of 
times
 to determine
process times: 
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <time.h>
#include <times.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
  {
   int i, status;
   pid_t pid;
   time_t currentTime;
   struct tms cpuTime;
   if ((pid = fork()) == -1) {         /* Start a child process.   */
        perror("fork error");
        exit(EXIT_FAILURE);
   }
   else if (pid == 0) {                /* This is the child.       */
      time(¤tTime);
      printf("Child process started at %s", ctime(¤tTime));
      for (i = 0; i < 5; ++i) {
         printf("Counting: %dn", i);  /* count for 5 seconds.     */
         sleep(1);
      }
      time(¤tTime);
      printf("Child process ended at %s", ctime(¤tTime));
      exit(EXIT_SUCCESS);
   }
   else {                              /* This is the parent.      */
      time(¤tTime);
      printf("Parent process started at %s", ctime(¤tTime));
      if (wait(&status) == -1 )        /* Wait for child process.  */
         perror("wait error");
      if (WIFEXITED(status))
           printf("Child process ended normally.n");
      else
         printf("Child process did not end normally.n");
      if (times(&cpuTime) < 0)         /* Get process times.       */
         perror("times error");
      else {
         printf("Parent process user time = %fn",
              ((double) cpuTime.tms_utime)/CLK_TCK);
         printf("Parent process system time = %fn",
              ((double) cpuTime.tms_stime)/CLK_TCK);
         printf("Child process user time = %fn",
              ((double) cpuTime.tms_cutime)/CLK_TCK);
         printf("Child process system time = %fn",
              ((double) cpuTime.tms_cstime)/CLK_TCK);
      }
      time(¤tTime);
      printf("Parent process ended at %s", ctime(¤tTime));
      exit(EXIT_SUCCESS);
   }
}
| RELATED FUNCTIONS | 
![]() Chapter Contents  | 
![]() Previous  | 
![]() Next  | 
![]() Top of Page  | 
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.