pause函数用法及实例

pause函数
调用该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu) 直到有信号递达将其唤醒。
int pause(void); 返回值:-1 并设置errno为EINTR
返回值:
① 如果信号的默认处理动作是终止进程,则进程终止,pause函数么有机会返回。
② 如果信号的默认处理动作是忽略,进程继续处于挂起状态,pause函数不返回。
③ 如果信号的处理动作是捕捉,则【调用完信号处理函数之后,pause返回-1】
errno设置为EINTR,表示“被信号中断”。想想我们还有哪个函数只有出错返回值。
④ pause收到的信号不能被屏蔽,如果被屏蔽,那么pause就不能被唤醒。
用pause函数和alarm函数达到sleep函数的目的

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<errno.h>
void 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);
ret = sigaction(SIGALRM,&act,&oldact);
if(ret == -1)
{
perror(“sigation error”);
exit(1);
}
	alarm(seconds);
ret = pause();
if(ret ==-1&&errno==EINTR)
{
printf(“pause success\n”);
}
ret = alarm(0);
sigaction(SIGALRM,&oldact,NULL);
}

int main()
{
while(1)
{
mysleep(2);
printf(----------\n”);
}
return 0;
}
发布了20 篇原创文章 · 获赞 1 · 访问量 2501

猜你喜欢

转载自blog.csdn.net/m0_46198325/article/details/104331838