睡眠系统调用,默认睡眠时间是多少?

时间:2018-08-27 08:02:09

标签: c sleep

如果我们不将任何参数传递给sleep()函数,默认的睡眠时间是多少?

#include<stdio.h>
int main()
{
    int pid,dip,cpid;
    pid = fork();
    if (pid == 0)
    {
        printf("\n first child is created %d",getpid());
    }
    else
    {
        dip = fork();
        if (dip == 0)
        {
            printf("\n second process is creatred %d",getpid());
        }
        else
        {
            sleep();
            cpid = wait(0);
            printf("\n child with pid %d  ", cpid);
            cpid = wait(0);
            printf("\n child with pid %d  ",cpid);
            printf("\n I am parent \n");
        }
    }
}

以上代码的输出是什么?

1 个答案:

答案 0 :(得分:4)

您不应调用未声明的函数(包括sleep)。根据{{​​3}}手册页,您应该#include <unistd.h>;在我的Linux / Debian系统/usr/include/unistd.h上声明:

 extern unsigned int sleep (unsigned int __seconds);

如果您未声明函数(这是坏习惯;请警告使用gcc sleep(3) -Wall -Wmissing-prototypes),则该函数具有未指定的参数和int的结果。 / p>

如果您这样做了(像应该那样)#include <unistd.h>,则您的代码甚至无法编译(对不带参数的sleep的调用将被标记为错误)。

在实践中,您的sleep调用将使用用于传递第一个参数的寄存器中的任何垃圾值来调用。这是典型的with,您无法预测该值,而您应该是undefined behavior

因此没有默认的睡眠时间,严格来说,您的问题没有任何意义。通过阅读C11标准scaredn1570 POSIX标准进行检查。