![]() 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.