题目
编写程序,实现电子表功能。
(1)使用SIGALRM信号
(2)创建父子进程,实现信号发送和响应。
程序
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
int hours = 0;
int seconds = 0;
int minutes = 0;
void clock(int signal) { //电子表
if (signal == SIGALRM) //处理SIGALRM信号
{
alarm(1); //设置每一秒发送一个信号
seconds++;
if (seconds == 60) {
minutes++;
seconds = 0;
if (minutes == 60) {
hours++;
minutes = 0;
if (hours == 24) {
hours = 0;
}
}
}
printf("\r计时:%02d:%02d:%02d", hours, minutes, seconds);
fflush(stdout); //清空输出缓冲区,并把缓冲区内容输出
}
}
int main() {
pid_t pid; //定义一个pid_t类型的变量pid
if((pid=fork())==-1){ //fork()函数(创建子进程后)返回一个进程号给pid并判断
perror("fork error!");
exit(EXIT_FAILURE);
}
else if(pid>0) //the father
{
signal(SIGALRM,clock); //创建SIGALRM信号(收到信号时执行doing函数)
pause(); //父进程挂起等待子进程信号到来
while(1);
}
else if(pid==0) // the son
{
sleep(5); //等待父进程创建信号完成
kill(getppid(),SIGALRM); //向父进程发送 SIGALRM 信号
exit(0);
}
return 0;
}