首页 > 代码库 > Linux Linux程序练习七

Linux Linux程序练习七

题目:实现两个程序mysignal、mycontrl,mycontrl给mysignal发送SIGINT信号,控制mysignal是否在屏幕打印“hello”字符串。

 

//捕捉信号#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <signal.h>int flag=0;void catch_sig(int sign){    switch(sign)    {    case SIGINT:        flag=flag==0?1:0;        break;    case SIGALRM:        exit(0);    }}int mysignal(int sign,void (*func)(int)){    struct sigaction act,oact;    act.sa_handler=func;    sigemptyset(&act.sa_mask);    act.sa_flags=0;    return sigaction(sign,&act,&oact);}int main(int arg,char *args[]){    //注册信号    mysignal(SIGINT,catch_sig);    mysignal(SIGALRM,catch_sig);    while(1)    {        if(flag==1)            printf("hello\n");        sleep(1);    }    return 0;}
//发送信号#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>#include <signal.h>int main(int arg,char * args[]){    if(arg<2)    {        printf("请输入一个参数!\n");        return -1;    }    int resid=0;    pid_t pid=atoi(args[1]);    resid=kill(pid,SIGALRM);    if(resid!=0)    {        printf("error message:%s\n",strerror(errno));        return -1;    }    return 0;}
.SUFFIXES:.c .oCC=gccSRCS=mycontrl.cOBJS=$(SRCS:.c=.o)EXEC=contrlstart:$(OBJS)    $(CC) -o $(EXEC) $(OBJS)    @echo "^_^-----OK------^_^".c.o:    $(CC) -Wall -g -o $@ -c $<clean:    rm -f $(OBJS)    rm -f $(EXEC)

 

Linux Linux程序练习七