sleep()函数
函数原型:
unsigned int sleep(unsigned int seconds);
函数功能:
使调用程序挂起等待seconds秒,或者直到有信号到达使之中断。
函数返回值:
若程序挂起到参数所指定的时间则返回0;若有信号中断则返回剩余秒数。
实现mysleep()
版本1
所需函数:
1)
int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);
sigaction函数可以读取和修改与指定信号相关联的处理动作。调用成功返回0,出错返回-1。
signo是指定信号的编号。若act指针非空,则根据act修改该信号的处理动作。若oact指针非空,则通过oact传出该信号原来的处理动作。act和oact指向sigaction结构体:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
sa_handler表示普通信号的处理函数。
- 将sa_handler赋值为常数SIG_IGN传给sigaction表示忽略信号;
- 赋值为常数SIG_DFL表示执行系统默认处理动作;
- 赋值为一个函数指针表示用自定义函数捕捉信号,或者说向内核注册了一个信号处理函数,该函数返回值为void,可以带一个int参数,通过参数可以得知当前信号的编号,这样就可以用同一个函数处理多种信号。
显然,这是一个回调函数,不是被main函数调用,而是被系统所调用。当某个信号的处理函数被调用时,内核自动将当前信号加入进程的信号屏蔽字,当信号处理函数返回时自动恢复原来的信号屏蔽字,这样就保证了在处理某个信号时,如果这种信号再次产生,那