网络编程fork()和sigaction()函数的运用
1. 编写程序,子进程计算一个耗时的计算(用sleep代替),父进程每秒显示一个“ . ”表示计算正在进行中,直到子进程结束,打印计算结果(示意的字符串即可),结束父进程。
2. 编写程序,当用户按下Ctrl+C时,询问是否退出程序,输入Y终止程序。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<signal.h>
void tingzhi(int sig){
char y;
if(sig==SIGINT){
printf("你想要退出吗?(Y or y)\n");
scanf("%c",&y);
if(y=='y'||y=='Y')
exit(0);
}
}
int main(int argc, char *argv[]){
int answer;
struct sigaction act;
act.sa_handler = tingzhi;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
pid_t pid = fork();
if(pid == 0){
sleep(10);
return 1;
} else {
sigaction(SIGINT, &act, 0);
while(!waitpid(-1, &answer, WNOHANG)){
sleep(1);
puts(".");
}
if(WIFEXITED(answer)){
printf("返回的结果是:%d\n", WEXITSTATUS(answer));
}
}
return 0;
}
运行结果: