Linux 신호 처리 1

5741 단어 linux
함수 원형
NAME

       signal - ANSI C signal handling



SYNOPSIS

       #include <signal.h>



       typedef void (*sighandler_t)(int);



       sighandler_t signal(int signum, sighandler_t handler);

signal 함 수 는 등록 기능 이 있어 서 아무 일 도 하지 않 습 니 다.시스템 에 신호 signum 이 올 때 handler 방식 으로 처리 하 라 고 만 알려 줍 니 다.신호 가 올 때 만 이 함 수 를 호출 할 수 있 습 니 다.신호 가 오지 않 으 면 영원히 이 함 수 를 호출 하지 않 을 것 이다.
사용 자 는 CTRL + c, Ctrl + \ 를 입력 하거나 터미널 드라이버 가 신호 제어 문자 에 할당 하 는 다른 모든 키 를 통 해 커 널 에 신 호 를 요청 할 수 있 습 니 다.
ctrl + c  --> 2)SIGINT ctrl + \  --> 3)SIGQUIT
이상 둘 다 프로그램 을 종료 시 킬 수 있 습 니 다.
코드
/*************************************************************************

    > File Name: hello.c

    > Author: KrisChou

    > Mail:[email protected] 

    > Created Time: Mon 25 Aug 2014 09:25:15 AM CST

 ************************************************************************/



#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <fcntl.h>

#include <assert.h>

#include <signal.h>

#include <sys/select.h>



void handler(int num)

{

    printf("sig_num: %d 
", num); } int main(int argc, char* argv[]) { char buf[1024]; signal(2, handler); int iret ; fd_set read_set, ready_set ; FD_ZERO(&read_set); FD_SET(0, &read_set); while(1) { ready_set = read_set ; iret = select(1, &ready_set, NULL, NULL, NULL); if(iret == 0) { continue ; }else if(iret == -1) { perror("select"); continue ; }else { iret = read(0, buf, 1024); buf[iret] = '\0'; write(1, buf, strlen(buf)); } }

프로그램 이 실 행 된 후 먼저 ctrl + c 를 누 르 면 결 과 는 다음 과 같 습 니 다.
[purple@localhost review]$ gcc test.c

[purple@localhost review]$ ./a.out

^Csig_num: 2

select: Interrupted system call

hello world!

hello world!

SIGINT 가 signal (2, handler) 을 통 과 했 기 때 문 입 니 다.등록 을 했 기 때문에 ctrl + c 를 누 르 면 신호 처리 함수 handler 가 자 연 스 럽 게 이 신 호 를 포착 할 수 있 음 이 분명 합 니 다 ^ Csignum: 2 。
select 함 수 는 인 터 럽 트 신 호 를 처리 합 니 다.인 터 럽 트 신 호 를 받 으 면 - 1 로 돌아 갑 니 다.따라서 select: Interrupted system call select 를 표시 합 니 다.
메모: select 함 수 는 3 중 상황 에서 돌아 갑 니 다. 각각: 폴 링 시간 이 되면 돌아 갑 니 다.신 호 를 받 으 면 돌아 올 겁 니 다.설명 자 는 이벤트 가 있 으 면 돌아 갑 니 다.
(추가: read 는 차단 함수 입 니 다. 신 호 를 받 을 때 신 호 를 먼저 처리 하고 계속 기다 리 세 요.)
그 후에 프로그램 이 실 행 된 것 이 분명 하 다.입력 이 있 으 면 select 가 1 을 되 돌려 주 고 입력 한 것 을 인쇄 합 니 다.ctrl + d 를 누 르 면 select 를 0 으로 되 돌려 주 고 프로그램 을 계속 실행 합 니 다.

좋은 웹페이지 즐겨찾기