C言語システムコール-gettimeofday

gettimeofdayシステムコール

概要

gettimeofdayはシステムの現在時刻を取得します。


gettimeofdayで取得する時刻はUNIXエポック(1970年01月01日00時00分00秒:UTC)からの秒数となります。

システムのタイムゾーンを用いて表示形式を変更するには、Cライブラリのlocaltime()やctime()を使用します。

戻り値となるtimeval構造体は以下の構成となります。


struct timeval {
    time_t      tv_sec;  /* 秒数       */
    suseconds_t tv_usec; /* マイクロ秒 */
}

なお、gettimeofdayの第二引数は現在使用されておらず、通常NULLを指定します。


settimeofdayシステムコール

システムの現在時刻を変更する場合にはsettimeofdayシステムコールを使用します。

settimeofdayの実行にはroot権限が必要となります。


サンプルプログラム


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/time.h>
#include <time.h>

/*!
 * @brief     現在時刻を出力する。
 * @return    0:success/-1:failure
 */
static int
show_now_date(void)
{
    struct timeval tv = {0};
    int rc = 0;

    rc = gettimeofday(&tv, NULL);
    if(rc < 0){
        printf("Error: gettimeofday() %s\n", strerror(errno));
        return(-1);
    }

    fprintf(stdout, "%s\n", ctime(&tv.tv_sec));

    return(0);
}

int
main(int argc, char *argv[])
{
    int rc = 0;

    if(argc != 1){
        fprintf(stderr, "Usage: %s\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    rc = show_now_date();
    if(rc != 0) exit(EXIT_FAILURE);

    exit(EXIT_SUCCESS);
}



関連ページ