0

C で名前が付けられたメソッドに出くわしましたが、do_nanosleep()その使用方法がわかりません。呼び出し元のスレッドの実行を一時停止することに関係していることはわかっていますが、そのタスクはnanosleep()C で処理されdo_nanosleep()ますnanosleep()

参考までに、こんな感じです。

    /* arguments are seconds and nanoseconds */
inline void
do_nanosleep(time_t  tv_sec, long tv_nsec)
{
    struct timespec req;
    req.tv_sec = tv_sec;
    req.tv_nsec = tv_nsec;

    nanosleep(&req, NULL);
}
4

2 に答える 2

4

do_nanosleep()は標準関数ではないため、ソースコードまたはシステムのマニュアルで追跡して、その機能を確認する必要があります。nanosleep()利用可能な場合は使用し、利用できない場合は別のもの (usleep()または)を使用する移植性ラッパーである可能性がありますsleep()。睡眠とはまったく関係のないこともするかもしれませんが、おそらくその名前が示すとおりのことをします.

Google はあなたの質問をインデックスに登録しておらず (質問されてから 5 分経っても)、 について何も知りませんdo_nanosleep()。これは、コードがシステム マニュアルではなく、ソースのどこかにある必要があることを示唆しています。


問題の関数定義では、ユーザーに を作成するよう要求する代わりに、2 つの引数を使用しstruct timespecて呼び出すことができることがわかります。 do_nanosleep())。次に、 を呼び出しますnanosleep()。そのため、ソフトウェアを作成した人々のdo_nanosleep()考えでは、 は、基礎となる関数に対してもう少し便利なインターフェイスを提供しnanosleep()ます。インラインであるため、 の宣言struct timespecはまだスコープ内にある必要があるため、著者に同意するとは確信していませんが、自動的に間違った決定を下すわけではありません。

于 2013-10-12T06:22:31.263 に答える