一、利用pause和alarm函数实现sleep函数
#include <unistd.h>
int pause(void);
pause函数使调用进程挂起直到有信号递达。如果信号的处理动作是终止进程,则进程终止,pause函数没有机会返回;如果信号的处理动作是忽略,则进程继续处于挂起状态,pause不返回;如果信号的处理动作是捕捉,则调用了信号处理函数之后pause返回-1,errno设置为EINTR,所以pause只有出错的返回值。错误码EINTR表示“被信号中断”。
alarm函数可以参考这里。
下面使用pause和alarm实现sleep(3)函数,称为mysleep:
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include<stdio.h>
#include<signal.h> #include<unistd.h> void sig_alrm( int signo) { /* nothing to do */ } unsigned int mysleep( unsigned int nsecs) { struct sigaction newact, oldact; unsigned int |