题目:实现两个程序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 $@ -c $<
clean:
rm -f $(OBJS)
rm -f $(EXEC)