Unix系のnanosleep()関数の使い方は?

UNIXでは、nanosleep() 関数は、プロセスを指定の時間をスリープさせるために用いられます。プロトタイプは次の通りです。

#include <time.h>

int nanosleep(const struct timespec *req, struct timespec *rem);

nanosleep()関数は2つの引数を受け取ります。

  1. ポインタはtimespec構造体を指しており、プロセスがスリープするのに要する時間を指定します。この構造体は2つのメンバを持ち、それぞれ秒数(time_t 型)とナノ秒数(long 型)です。
  2. 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に保存されます。

bannerAds