clock_settime()

Set a clock

Synopsis:

#include <time.h>

int clock_settime( clockid_t id,
                   const struct timespec * tp );

Arguments:

id
CLOCK_REALTIME, the ID of the clock that maintains the system time.

For more information about the different clocks, see "Other clock sources" in the Clocks, Timers, and Getting a Kick Every So Often of Getting Started with QNX Neutrino.

tp
A pointer to a timespec structure containing at least the following members:
  • tv_sec — the number of seconds since 1970.
  • tv_nsec — the number of nanoseconds 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_settime() function sets the clock specified by id to the time specified in the buffer pointed to by tp.

Note:
  • Be careful if you set the date during the period that a time zone is switching from daylight saving time (DST) to standard time. When a time zone changes to standard time, the local time goes back one hour (for example, 2:00 a.m. becomes 1:00 a.m.). The local time during this hour is ambiguous (e.g., 1:14 a.m. occurs twice in the morning that the time zone switches to standard time). To avoid problems, use UTC time to set the date in this period.
  • You can't set the time when the id is CLOCK_MONOTONIC.
  • In order to set the clock, your process must have the PROCMGR_AID_CLOCKSET ability enabled. For more information, see procmgr_ability().

Returns:

0
Success
-1
An error occurred (errno is set).

Errors:

EINVAL
One of the following occurred:
  • The id is invalid. You can't set the time for CLOCK_MONOTONIC or for a process or thread CPU-time clock.
  • The number of nanoseconds specified by the tv_nsec member is less than zero or greater than or equal to 1000 million.
  • The tv_sec member is -1 (which could happen if you set it to the result from mktime() without checking to see if the call succeeded).
EPERM
The calling process doesn't have the required permission; see procmgr_ability().

Examples:

/*  This program sets the clock forward 1 day. */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

int main( void )
  {
    struct timespec stime;

    if( clock_gettime( CLOCK_REALTIME, &stime) == -1 ) {
       perror( "getclock" );
       return EXIT_FAILURE;
    }

    stime.tv_sec += (60*60)*24L;  /* Add one day */
    stime.tv_nsec = 0;
    if( clock_settime( CLOCK_REALTIME, &stime) == -1 ) {
       perror( "setclock" );
       return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
  }

Classification:

POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes