码迷,mamicode.com
首页 > 系统相关 > 详细

Linux Linux程序练习七

时间:2016-09-07 22:49:58      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

题目:实现两个程序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)

 

Linux Linux程序练习七

标签:

原文地址:http://www.cnblogs.com/zhanggaofeng/p/5851289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!