Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=signal">signal</a>(2)

1장. signal(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 예제

시그널(:12)을 처리한다. - ANSI C


1.1절. 사용법

#include <signal.h>

void (*signal(int signum, void  (*handler) (int))) (int);
		


1.2절. 설명

성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno(:12) 값을 설정한다.

SIG_IGN

시그널을 무시한다.

그러나 SIGKILL(:12), SIGSTOP(:12) 는 무시할수 없다.

SIG_DFL

시그널의 기본동작을 하도록 한다.

시그널:::핸들러(:12) 함수에 넘겨지는 정수 인자는 시그널의 번호이다. 시그널:::번호(:12)를 넘겨줌으로 인해서 여러개의 시그널에 대해서 하나의 시그널 핸들러를 사용할수 있도록 한다.

SIGKILL, SIGSTOP 시그널에 대해서는 핸들러를 지정할수 없다. 이들 시그널은 무시할수도 없고 핸들러를 지정할수도 없이 단지 기본동작으로만 작동한다.


1.3절. 반환값

signal 은 이전의 시그널 핸들러의 포인터를 반환하며, 에러시 SIG_ERR 을 리턴한다.


1.4절. 예제

#include <signal.h>

#include <unistd.h>

void sig_handler(int signo); // 비프음 발생 함수

int main()
{
    int i = 0;
    signal(SIGINT, (void *)sig_handler);

    while(1)
    {
        printf("%d\n", i);
        i++;
        sleep(1);
    }
    return 1;
}


void sig_handler(int signo)
{
    printf("SIGINT 발생\n");
}
		
SIGINT(:12) 를 발생시키는 가장간단한 방법은 키보드의 Ctrl+C 를 입력하는 방법이다. 위 프로그램을 실행시킨후 Ctrl+C 를 실행시키면 SIGINT 시그널이 전달되고 어플리케이션은 해당 시그널 핸들러인 sig_handler() 함수를 실행시키는걸 볼수 있을것이다.

관련글