您的位置:首页 > 运维架构 > Linux

Linux Linux程序练习七

2016-09-07 22:06 399 查看
题目:实现两个程序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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: