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);
}