C言語システムコール-getitimer
getitimerシステムコール
概要
getitimerはインターバルタイマの値を取得します。
インターバルタイマは、一定時間毎にシグナルハンドラで用意した処理を実行するプログラムの作成に用います。
インターバルタイマを用いて一定時間感覚でシグナルを発生させるには「setitimer」システムコールを使用します。
サンプルプログラム
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <sys/time.h>
/*!
* @brief インターバルタイマの値を表示する
* @return 0:success/-1:failure
*/
static int
show_itimer_val(void)
{
int rc = 0;
struct itimerval val;
rc = getitimer(ITIMER_REAL, &val);
if(rc < 0){
printf("Error: getitimer() %s\n", strerror(errno));
return(-1);
}
fprintf(stdout,
"interval = %ld.%ld\n"
"value = %ld.%ld\n",
(long)val.it_interval.tv_sec,
(long)val.it_interval.tv_usec,
(long)val.it_value.tv_sec,
(long)val.it_value.tv_usec);
return(0);
}
/*!
* @brief ドットを出力する
*/
static void
print_dot()
{
write(2, ".", 1);
}
/*!
* @brief 一定間隔で出力する
* @return 0:success/-1:failure
*/
static int
interval_print(void)
{
int rc = 0;
struct itimerval val;
struct sigaction act;
sigset_t set;
/* シグナルハンドラを設定する */
memset(&act, 0, sizeof(act));
act.sa_handler = print_dot;
rc = sigaction(SIGALRM, &act, NULL);
if(rc < 0){
printf("Error: sigaction() %s\n", strerror(errno));
return(-1);
}
/* インターバルタイマを設定する */
val.it_interval.tv_sec = 1;
val.it_interval.tv_usec = 0;
val.it_value = val.it_interval; /* タイマ現在値を変更する */
rc = setitimer(ITIMER_REAL, &val, NULL);
if(rc < 0){
printf("Error: setitimer() %s\n", strerror(errno));
return(-1);
}
/* タイマの待ち合わせ */
sigemptyset(&set);
while(1){
sigsuspend(&set);
}
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 = interval_print();
if(rc != 0) exit(EXIT_FAILURE);
exit(EXIT_SUCCESS);
}
関連ページ
- C言語
- C言語システムコール
- C言語システムコール-chdir
- C言語システムコール-chroot
- C言語システムコール-fork
- C言語システムコール-execve
- C言語システムコール-wait
- C言語システムコール-getpid
- C言語システムコール-getpriority / C言語システムコール-setpriority
- C言語システムコール-getpgid / C言語システムコール-setpgid
- C言語システムコール-getuid / C言語システムコール-setuid
- C言語システムコール-getsid / C言語システムコール-setsid
- C言語システムコール-getgroups / C言語システムコール-setgroups
- C言語システムコール-getrusage
- C言語システムコール-getrlimit / C言語システムコール-setrlimit
- C言語システムコール-nanosleep
- C言語システムコール-kill
- C言語システムコール-sigaction
- C言語システムコール-sigsuspend
- C言語システムコール-signal
- C言語システムコール-getitimer
- C言語システムコール