Установить значение часов
#include <time.h>
int clock_settime( clockid_t id,
const struct timespec *tp );
- id
- Идентификатор часов
CLOCK_REALTIME
или CLOCK_MONOTONIC
системного времени, или идентификатор часов, возвращаемый ClockId().
- tp
- Указатель на структуру struct timespec, в которой функция clock_gettime() сохранит время, имеющей следующие поля:
- tv_sec — количество секунд, начиная с 1970 года.
- tv_nsec — количество наносекунд, истекших в текущей секунде. Это значение увеличивается на несколько наносекунд в зависимости от разрешения системных часов.
libc
Функция clock_settime() устанавливает значение часов id временем, указанным в структуре tp.
| - Следует осторожно устанавливать дату в период переключения часового пояса с летнего времени (DST) на стандартное время. Когда часовой пояс меняется на стандартное время, местное время возвращается на один час назад (например, 2:00 становится 1:00 утра). Местное время в этот час неоднозначно (например, 1:14 утра приходится дважды утром, когда часовой пояс переключается на стандартное время). Чтобы избежать проблем, используйте время UTC для установки даты в этот период.
- Нельзя установить время, если идентификатор id равен
CLOCK_MONOTONIC .
- Для установки времени требуются права (привелегии) суперпользователя.
|
- 0
- Успешное завершение.
- -1
- Возникла ошибка. Код ошибки записан в errno.
- EINVAL
- Произошло одно из следующих событий:
- некорректный идентификатор id.
- количество наносекунд, указанных в поле tv_nsec меньше ноля, или более (или равно) 1000 миллионам.
- значение поля tv_sec равно
-1
(например, это может произойти, если устанавливается результат вызова mktime() без проверки, что этот вызов завершился успешно).
- EPERM
- У процесса нет прав суперпользователя для изменения времени.
#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;
stime.tv_nsec = 0;
if ( clock_settime( CLOCK_REALTIME, &stime ) == -1 )
{
perror( "setclock" );
return (EXIT_FAILURE);
}
return (EXIT_SUCCESS);
}
POSIX 1003.1 Timers
- Нет
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Да
- В потоке
- Да
struct timespec, clock_getres(), clock_gettime(), errno, mktime()
Предыдущий раздел: Описание API системной библиотеки