関数
nanosleep
指定時間の間、動作を止める (ナノ秒単位)
nanosleep(2) は、ナノ秒単位で sleep を行うシステムコールである。FreeBSD・Linux いずれも、
- システムコール: nanosleep(2)
- ライブラリ関数: sleep(3), usleep(3)
であり、sleep(3) と usleep(3) は nanosleep(2) を呼び出すという関係性である。
下記は 1.5秒 sleep する擬似コード。
#include <time.h>
struct timespec req;
rec.tv_sec = 1;
rec.tv_nsec = 500000000; /* 500,000,000ナノ秒 = 500,000マイクロ秒 = 500ミリ秒 = 0.5秒 */
struct timespec rem;
int ret = nanosleep(&req,&rem);
if ( ret == -1 ) {
if ( errno == EINTR ) {
シグナルで中断してしまったので、rem に残り秒数が入っているのでリカバリ処理を行う
} else {
perror("nanosleep() failed");
}
}