Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linux setitimer機能の操作スキル

Linux setitimer機能の操作スキル

  
                

Linuxシステムでsetitimer機能を使用すると、定期的に機能を実行するために使用される高精度のタイミング機能を使用できます。次の小シリーズでは、setitimer機能の使用方法について詳しく説明します。

説明:次のタイミングは、より多くのタイマーによってカバーされる前に、プロセスsetitimerが一つだけを持つことができるだけで、独自のを達成するためのプロセスと考えることができます。

setitimer()は、同じプロセス内で複数のタイマーをサポートするための複数の同時使用をサポートしていません。

Linux関連のタイマー(setitimer)は次のように説明されています。

Linuxシステムには各プロセスに3つのタイマーがあり、それぞれが独自の異なるドメインでカウントされます。いずれかのタイマーが最後までカウントすると、システムはプロセスにシグナルを送信し、カウンターがリセットされます。

次の3つのカウンタ形式がサポートされています。

ITIMER_REALカウンタはリアルタイムで1ずつ減少し、カウントが比較された後にSIGALRMシグナルが送信されます。

ITIMER_VIRTUALプロセスが実行中にカウントすると、カウントが完了したときにSIGVTALRMシグナルがプロセスに送信されます。

ITIMER_PROFは、プロセスが実行され、システムがプロセスに代わって実行されているときにカウントされます。

[getitimer /setitimerシステムコール]

説明:

インターバルタイマーの値を取得または設定します。システムはプロセスに3種類のタイマーを提供し、各クラスは異なる時間領域でその値を減らします。タイマーが期限切れになると、シグナルがプロセスに送信され、その後タイマーが再起動します。

使い方:

#include "sys /time.h"

int getitimer(int which、struct itimerval * value);

int setitimer( Int which、const struct itimerval * value、struct itimerval * ovalue);

パラメータ:

which:間欠的なタイマータイプ、3つのオプションがあります。

ITIMER_REAL //値は0、タイマーの値はリアルタイムでデクリメントされ、送信されるシグナルはSIGALRMです。

ITIMER_VIRTUAL //値は1です。プロセスの実行時にタイマーの値は減少し、送信されるシグナルはSIGVTALRMです。

ITIMER_PROF //値は2です。タイマーおよびプロセスの実行中にタイマーの値は減少し、送信されるシグナルはSIGPROFです。

value、ovalue:timeパラメータ、プロトタイプは以下のとおりです。

struct itimerval

{

struct timeval it_interval;

struct timeval it_value;

}

struct timeval

{
long tv_sec;

long tv_usec;

}; < Br>

getitimer()はvalueが指す構造体に現在のタイマーの値を入れます。

setitimer()は、valueが指す構造体をタイマーの現在の値に設定しますovalueがNULLでない場合は、タイマーの元の値を返します。

戻り値説明:

正常に実行されると0を返します。失敗した場合は-1が返され、errnoは次のいずれかの値に設定されます。EFAULT:valueまたはovalueは無効なポインタです。EINVAL:その値はITIMER_REAL、ITIMER_VIRTUAL、またはITIMER_PROFのいずれでもありません。 >

#include "stdio.h"

#include "unistd.h"

#include "signal.h"

#include "string.h"

#include "sys /time.h"

#include "errno.h"

void PrintMsg(int Num)

{

printf('%s /n'、' Hello World');

return;

}

int main(int argc、char * argv) [])

{

signal(SIGALRM、PrintMsg);

struct itimerval tick;

tick.it_value.tv_sec = 10; //10タイマーは1秒後に開始されます

tick.it_value.tv_usec = 0;

tick.it_interval.tv_sec = 1; //タイマーが開始されると、1秒ごとに対応するテキストが実行されます関数

tick.it_interval.tv_usec = 0;

//setitimerはSIGALRMシグナルをトリガーします

int ret = setitimer(ITIMER_REAL、& tick、NULL);

if(ret!= 0)

{

printf('タイマーエラーを設定します。%s /n>; strerror(errno));

return -1;

}

printf(' Wait!/n');

getchar();

return 0;

}

上記はLinuxでのsetitimer関数の使用方法です。 setitimer機能には3種類のタイマー選択がありますが、より正確なタイミングを達成するためには、setitimer機能を選択することをお勧めします。

Copyright © Windowsの知識 All Rights Reserved