clock_gettime()
Get the current time of a clock
Synopsis:
#include <time.h> int clock_gettime( clockid_t clock_id, struct timespec * tp );
Arguments:
- clock_id
- The ID of the clock whose time you want to get; one of:
- CLOCK_REALTIME — the standard POSIX-defined clock. Timers based on this clock wake up the processor if it's in a power-saving mode.
- CLOCK_SOFTTIME — this clock is active only when
the processor isn't in a power-saving mode.
For example, an application using a CLOCK_SOFTTIME timer
to sleep wouldn't wake up
the processor when the application was due to wake up.
This will allow the processor to enter a power-saving mode.
While the processor isn't in a power-saving mode, CLOCK_SOFTTIME behaves the same as CLOCK_REALTIME.
- CLOCK_MONOTONIC — this clock always increases at a constant rate and can't be adjusted.
- A clock ID returned by clock_getcpuclockid() or pthread_getcpuclockid(), representing the amount of time the process or thread has spent actually running.
- tp
- A pointer to a
timespec
structure where clock_gettime() can store the time.
This function sets the members as follows:
- tv_sec — the number of seconds since 1970.
- tv_nsec — the number of nanoseconds expired in the current second. This value increases by some multiple of nanoseconds, based on the system clock's resolution.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The clock_gettime() function gets the current time of the clock specified by clock_id, and puts it into the buffer pointed to by tp.
Returns:
- 0
- Success.
- -1
- An error occurred (errno is set).
Errors:
- EFAULT
- A fault occurred trying to access the buffers provided.
- EINVAL
- Invalid clock_id.
- ESRCH
- The process associated with this request doesn't exist.
Examples:
/*
* This program calculates the time required to
* execute the program specified as its first argument.
* The time is printed in seconds, on standard out.
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#define BILLION 1000000000L;
int main( int argc, char** argv )
{
struct timespec start, stop;
double accum;
if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
perror( "clock gettime" );
return EXIT_FAILURE;
}
system( argv[1] );
if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
perror( "clock gettime" );
return EXIT_FAILURE;
}
accum = ( stop.tv_sec - start.tv_sec )
+ (double)( stop.tv_nsec - start.tv_nsec )
/ (double)BILLION;
printf( "%lf\n", accum );
return EXIT_SUCCESS;
}
Classification:
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |