首页 > 代码库 > APUE1.9信号

APUE1.9信号

技术分享

 

#include "apue.h"#include <sys/wait.h>static void sig_int(int); /* our signal-catching function */int main(void){    char buf[MAXLINE]; /* from apue.h */    pid_t pid;    int status;    if (signal(SIGINT, sig_int) == SIG_ERR)    {        err_sys("signal error");    }    printf("%% "); /* print prompt (printf requires %% to print %) */    while (fgets(buf, MAXLINE, stdin) != NULL)    {        if (buf[strlen(buf) - 1] == ‘\n‘)        {            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("%% ");    }    return 0;}void sig_int(int signo){    printf("interrupt\n%% ");}

 

all: shell1 shell2shell1: shell1.c	g++ -g -Wall shell1.c ../lib/libapue.a -I ../include -o shell1shell2: shell2.c	g++ -g -Wall shell2.c ../lib/libapue.a -I ../include -o shell2clean:	rm shell1 shell2

 

 

技术分享

APUE1.9信号