Linux Linux程序练习七
Posted 庖丁解牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 .o CC=gcc SRCS=mycontrl.c OBJS=$(SRCS:.c=.o) EXEC=contrl start:$(OBJS) $(CC) -o $(EXEC) $(OBJS) @echo "^_^-----OK------^_^" .c.o: $(CC) -Wall -g -o [email protected] -c $< clean: rm -f $(OBJS) rm -f $(EXEC)
以上是关于Linux Linux程序练习七的主要内容,如果未能解决你的问题,请参考以下文章