做类似淘宝网站多少钱,企业网站设计的深圳公司,餐饮网络推广有哪些渠道,吉林省吉林市丰满区pause函数 调用该函数可以造成进程主动挂起#xff0c;等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu) 直到有信号递达将其唤醒。 int pause(void); 返回值#xff1a;-1 并设置errno为EINTR 返回值#xff1a; ① 如果信号的默认处理动作是终止进程等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu) 直到有信号递达将其唤醒。 int pause(void); 返回值-1 并设置errno为EINTR 返回值 ① 如果信号的默认处理动作是终止进程则进程终止pause函数么有机会返回。 ② 如果信号的默认处理动作是忽略进程继续处于挂起状态pause函数不返回。 ③ 如果信号的处理动作是捕捉则【调用完信号处理函数之后pause返回-1】 errno设置为EINTR表示“被信号中断”。想想我们还有哪个函数只有出错返回值。 ④ pause收到的信号不能被屏蔽如果被屏蔽那么pause就不能被唤醒。 练习使用pause和alarm来实现sleep函数。 【mysleep.c】 注意unslept alarm(0)的用法。 例如睡觉alarm(10)闹铃。 正常 10后闹铃将我唤醒这时额外设置alarm(0)取消闹铃不会出错。 异常 5分钟被其他事物吵醒alarm(0)取消闹铃防止打扰。 /***
pause.c
***/
#includestdio.h
#includeerrno.h
#includeunistd.h
#includesignal.h
#includestdlib.hvoid catch_sigalrm(int signo)
{;
}unsigned int mysleep(unsigned int seconds)
{int ret;struct sigaction act,oldact;act.sa_handler catch_sigalrm;sigemptyset(act.sa_mask);act.sa_flags 0;ret sigaction(SIGALRM,act,oldact);if(-1 ret){perror(sigaction error);exit(1);}alarm(seconds);ret pause();if(-1 ret errno EINTR){printf(pauses success\n);}ret alarm(0);sigaction(SIGALRM,oldact,NULL);return ret;
}int main()
{while(1){mysleep(3);printf(-----------\n);}return 0;
} 转载于:https://www.cnblogs.com/wanghao-boke/p/11334979.html