网络编程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;
}


运行结果:
网络编程fork()和sigaction()函数的运用