Unix系のnanosleep()関数の使い方は?
UNIXでは、nanosleep() 関数は、プロセスを指定の時間をスリープさせるために用いられます。プロトタイプは次の通りです。
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
nanosleep()関数は2つの引数を受け取ります。
- ポインタはtimespec構造体を指しており、プロセスがスリープするのに要する時間を指定します。この構造体は2つのメンバを持ち、それぞれ秒数(time_t 型)とナノ秒数(long 型)です。
- rem: 残り時間を受け取るtimespec構造体へのポインタ。このプロセスがシグナルによって中断されたとき、残り時間はremに格納されます。
nanosleep()関数は、指定した時間(ナノ秒単位)プロセスをスリープさせます。スリープ時間が終了するか、シグナルによって割り込まれるまでプロセスはブロックされます。スリープ時間が1秒を超える場合はsleep()関数を使用できます。
nanosleep()関数は、戻り値が0のときは休止が終了したことを、戻り値が-1のときはエラーが発生したことを示し、エラーコードはerrno内に格納されます。
ネイティブな日本語で言い換えてください。1つの選択肢のみが必要です:日本語の使用例:
#include <stdio.h>
#include <unistd.h>
#include <time.h>
int main() {
struct timespec req, rem;
req.tv_sec = 1; // 休眠1秒
req.tv_nsec = 0; // 休眠的纳秒数
if(nanosleep(&req, &rem) == -1) {
printf("nanosleep error\n");
return 1;
}
printf("Sleep complete\n");
return 0;
}
上記の例では、プロセスは1秒間スリープします。ただし、スリープはシグナルによって割り込まれた場合、スリープの残余時間はremに保存されます。