如果我们不将任何参数传递给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");
}
}
}
以上代码的输出是什么?
答案 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标准scared和n1570 POSIX标准进行检查。