23-练习
23.9 练习
23-1. 尽管Linux将alarm()实现为系统调用,但这当属蛇足。请用setitimer()实现alarm()。
23-2. 试着将程序清单23-3(t_nanosleep.c)程序置于后台运行,并设置60秒的休眠间隔,同时使用如下命令发送尽可能多的SIGINT信号给后台进程:
应该能注意到程序休眠时间要长于预期。将nanosleep()用clock_gettime()(使用CLOCK_REALTIME时钟)和设置TIMER_ABSTIME标志的clock_nanosleep()来替换。(此练习需要Linux 2.6版本。)反复测试修改后的程序,并解释新老程序间的差别。
23-3. 编写一个程序验证:如果调用timer_create()时将参数evp置为NULL,那么这就等同于将evp设为指向sigevent结构的指针,并将该结构中的sigev_notify置为SIGEV_SIGNAL,将sigev_signo置为SIGALRM,将si_value.sival_int置为定时器ID。
23-4. 修改程序清单23-5(ptmr_sigev_signal.c)中程序,并用sigwaitinfo()替换信号处理器函数。
①译者注:内核调度所为。