zoukankan      html  css  js  c++  java
  • APUE_1.10ReadCommandsFromStandardInputAndExecuteThem

    使用信号捕抓ctrl + c信号

    /*
     * 1.10ReadCommandsFromStandardInputAndExecuteThem.cpp
     *
     *  Created on: Feb 11, 2015
     *      Author: sunyj
     */
    
    #include "../apuesunyj.h"
    #include <sys/wait.h>
    
    static void sig_int(int); // our signal-catching function,static limit this function in this file
    
    int main(void)
    {
        char buf[MAXLINE];
        pid_t pid;
        int status;
        if (signal(SIGINT, sig_int) == SIG_ERR) // catch the ctrl + c signal
        {
            err_sys("signal error");
        }
    
        printf("%% "); /* print prompt (printf requires %% to print %) */
        // ctrl + c invoke function sig_int, ctrl + d end this loop
        while (fgets(buf, MAXLINE, stdin) != NULL)
        {
            if (buf[strlen(buf) - 1] == '
    ')
            {
                buf[strlen(buf) - 1] = 0; /* replace newline with null */
            }
            if ((pid = fork()) < 0)
            {
                err_sys("fork error");
            }
            else if (pid == 0)
            {   /* child */
                execlp(buf, buf, (char *) 0);
                err_ret("couldn't execute: %s", buf);
                exit(127);
            }
            /* parent */
            if ((pid = waitpid(pid, &status, 0)) < 0)
                err_sys("waitpid error");
            printf("%% ");
        }
        printf("EOF(ctrl + d) received
    ");
        printf("bye bye
    ");
        exit(0);
    }
    
    void sig_int(int signo)
    {
        printf("interrupt by signal ctrl + c 
    %% ");
    }
    

    7c55f54a5ede27e47eea6fe26a3869877e752e8b1904cf5f075527a22bda53b57f48157d1119f39f73137f82d808e044

  • 相关阅读:
    单元测试
    软件测试计划
    软件杯A9的设计与实现
    阅读笔记7
    阅读笔记6
    阅读笔记5
    阅读笔记4
    阅读笔记3
    阅读笔记2
    阅读笔记1
  • 原文地址:https://www.cnblogs.com/sunyongjie1984/p/4286011.html
Copyright © 2011-2022 走看看