Unix-system-calls-nanosleep

提供:Dev Guides
移動先:案内検索

[top]#

|http://www.google.com/[Google] | a|

Web This Site
  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

[cols=",,,,,,,",]

| |  Home   | |  References   | |  Discussion Forums   | |  About TP  

[width="100%",cols="100%",]

a| == nanosleep()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

nanosleep-指定された時間だけ実行を一時停止します

概要

  • #define _POSIX_C_SOURCE 199309 * *#include <time.h> *
  • int nanosleep(const struct timespec * req 、struct timespec * rem ); *

説明

*nanosleep* ()は、少なくとも_ * req_で指定された時間だけプログラムの実行を遅らせます。 シグナルがプロセスに配信された場合、関数はより早く戻ることができます。 この場合、-1を返し、_errno_を *EINTR* に設定し、_rem_がNULLでない限り、_rem_が指す構造体に残り時間を書き込みます。 _ * rem_の値は、 *nanosleep* ()を再度呼び出して、指定された一時停止を完了するために使用できます。

構造_timespec_は、ナノ秒の精度で時間間隔を指定するために使用されます。 _ <time.h> _で指定され、次の形式を持ちます。

struct timespec { time_t tv_sec; /*seconds*/ long tv_nsec; /*nanoseconds*/ };

ナノ秒フィールドの値は、0から999999999の範囲でなければなりません。

*sleep* (3)および *usleep* (3)と比較して、 *nanosleep* ()は信号に影響を与えないという利点があり、POSIXによって標準化され、より高いタイミング解像度を提供し、スリープを継続できます。信号により簡単に中断されました。

返り値

要求された間隔で正常にスリープすると、 nanosleep ()は0を返します。 呼び出しがシグナルハンドラーによって中断されるか、エラーが発生した場合、-1を返し、_errno_がエラーを示すように設定されます。

エラー

Tag Description
EFAULT Problem with copying information from user space.
*EINTR * The pause has been interrupted by a non-blocked signal that was delivered to the process. The remaining sleep time has been written into* rem so that the process can easily call nanosleep() again and continue with the pause.
EINVAL The value in the tv_nsec field was not in the range 0 to 999999999 or tv_sec was negative.

BUGS

*nanosleep* ()の現在の実装は、1/_HZ_ sの解像度を持つ通常のカーネルタイマーメカニズムに基づいています( *time* (7)を参照)。 したがって、 *nanosleep* ()は常に少なくとも指定された時間だけ一時停止しますが、プロセスが再び実行可能になるまで、指定された時間よりも最大10 ms長くかかることがあります。 同じ理由で、* _ rem_で配信された信号の場合に返される値は、通常1/_HZ_ sの次に大きい倍数に丸められます。

古い動作

より正確な一時停止を必要とするアプリケーションをサポートするために(たとえば、一部のタイムクリティカルなハードウェアを制御するため)、 nanosleep ()は、 _SCHED_FIFO_や_SCHED_RR_などのリアルタイムポリシー。 この特別な拡張機能はカーネル2.5.39で削除されたため、現在の2.4カーネルには存在しますが、2.6カーネルには存在しません。

Linux 2.4では、 nanosleep ()がシグナル(たとえば、SIGTSTP)によって停止された場合、SIGCONTシグナルによってプロセスが再開された後、呼び出しはエラー EINTR で失敗します。 システムコールがその後再起動された場合、プロセスが停止状態で費やした時間はスリープ間隔に対してカウントされません。

準拠

POSIX.1-2001。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

|  

[cols="^",]

|Advertisements