Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 정규화
  • 우아한형제들
  • 1259
  • 운영체제
  • OperatingSystem
  • 우테코 체스
  • Spring
  • 프로세스
  • DB
  • 자바
  • BOJ
  • 백준
  • OS
  • 우아한테크코스5기
  • 인덱스
  • C
  • 블랙잭
  • bean
  • 우테코5기
  • 리눅스
  • Linux
  • C++
  • Operating System
  • 우아한테크코스
  • 트랜잭션
  • 데이터 조작어
  • 원시값 포장
  • signal
  • SIGINT
  • 우테코

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

C / LINUX signal(2)
C & LINUX

C / LINUX signal(2)

2022. 5. 31. 16:37

함수 기능

지정한 시그널의 처리 방식을 등록하는 시스템 호출 함수이다.

함수 원형

#include <signal.h>
sighandler_t signal(int signum, sighandler_t handler);

함수 파라메터

signal

인자에는 시그널 값을 넣는다.

handler

SIG_IGN 상수 , SIG_DFL상수, 시그널 발생시 호출될 함수의 주소를 넣을 수 있다.

함수 예제

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>

static void ssu_signal_handler(int signo);

int main(void){
    if(signal(SIGINT, ssu_signal_handler)==SIG_ERR){
        fprintf(stderr,"cannot handle SIGINT\n");
        exit(EXIT_FAILURE);
    }

    if(signal(SIGTERM, ssu_signal_handler)==SIG_ERR){
        fprintf(stderr,"cannot handle SIGTERM\n");
        exit(EXIT_FAILURE);
    }

    if(signal(SIGPROF, SIG_DFL)==SIG_ERR){
        fprintf(stderr, "cannot reset SIGPROF\n");
        exit(EXIT_FAILURE);
    }
    
    if(signal(SIGHUP, SIG_IGN)==SIG_ERR){
        fprintf(stderr,"cannot ignore SIGHUP\n");
        exit(EXIT_FAILURE);
    }

    while(1)
        pause();

    exit(0);
}

static void ssu_signal_handler(int signo){
    if(signo == SIGINT)
        printf("caught SIGINT\n");
    else if(signo ==SIGTERM)
        printf("caught SIGTERM\n");
    else{
        fprintf(stderr,"unexpected signal\n");
        exit(EXIT_FAILURE);
    }
}

함수 결과

signal을 호출하여 sigint, sigterm에 대한 시그널 핸들러를 등록. ctrl c를 통해 sigint

 

리눅스시스템 프로그래밍 - 홍지만 저

교재 내에 있는 예제를 바탕으로 작성한 글 입니다.

'C & LINUX' 카테고리의 다른 글

C / LINUX alarm(2)  (0) 2022.05.31
C / LINUX raise(3)  (0) 2022.05.31
C/LINUX _t 자료형  (0) 2022.05.04
C / LINUX execl(3), execv(3), execle(3), execve(2), execlp(3), execvp(3)  (0) 2022.05.02
C / LINUX wait(2) waitpid(2)  (0) 2022.05.02
    'C & LINUX' 카테고리의 다른 글
    • C / LINUX alarm(2)
    • C / LINUX raise(3)
    • C/LINUX _t 자료형
    • C / LINUX execl(3), execv(3), execle(3), execve(2), execlp(3), execvp(3)
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바