Get the current time of a clock


#include <time.h>

int clock_gettime( clockid_t clock_id,
                   struct timespec * tp );


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_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.
  • 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.

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.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


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.


An error occurred (errno is set).


A fault occurred trying to access the buffers provided.
Invalid clock_id.
The process associated with this request doesn't exist.


 * 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;


POSIX 1003.1

Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes