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 the following:
- 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_MONOTONIC — this clock always increases
at a constant rate and can't be adjusted.
- CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID,
or a clock ID returned by
clock_getcpuclockid(),
pthread_getcpuclockid(),
or
ClockId(),
representing the approximate amount of time the process or thread has spent running.
CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID are
special clock IDs that refer to the CPU time of the calling process and thread, respectively.
See
"Monitoring execution times"
in the Tick, Tock: Understanding the Microkernel's Concept of Time chapter of the
QNX Neutrino Programmer's Guide.
For more information about the different clocks, see
"Other clock sources"
in the Clocks, Timers, and Getting a Kick Every So Often chapter of
Getting Started with QNX Neutrino.
- tp
- A pointer to a
timespec
structure where clock_gettime() can store the time.
For CPU-time clocks, this time is the number of seconds and nanoseconds of execution time;
for other clocks, 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:
POSIX 1003.1
Safety: |
|
Cancellation point |
No |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |