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程序练习七的主要内容,如果未能解决你的问题,请参考以下文章

Linux Linux程序练习七

Linux Linux程序练习四

Linux Linux程序练习六

Linux Linux程序练习十七

Linux Linux程序练习九

Linux Linux程序练习五