signal

    C / LINUX sigpending(2)

    함수 기능 팬딩 중이거나, 블록되었을 때 발생한 시그널 집합을 가져오는 시스템호출 함수 함수 원형 #include int sigpending(sigset_t *set) 함수 파라메터 set 인자가 가리키는 곳에 호출한 프로세스에 시그널이 블록되어있으며 현재 팬딩 중인 시그널들의 집합을 저장한다. 함수 예제 #include #include #include #include int main(void) { sigset_t pendingset; sigset_t sig_set; int count = 0; //sig_set을 1로 초기화 sigfillset(&sig_set); //sig_set이 프로세스의 시그널 마스크가 됨 sigprocmask(SIG_SETMASK, &sig_set, NULL); while(1) ..

    C / LINUX sigprocmask(2)

    함수 기능 현재의 시그널 마스크를 검사하거나 변경하는 시스템 호출 함수이다. 일반적으로 sigprocmask는 시그널을 블록시키고 특정작업의 실행을 마치고나면 블록을 해제하는데 사용된다. 함수 원형 #include int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 함수 파라메터 how 시그널 마스크의 구체적인 변경 방법을 정의하는 상수 값 set 마스크하거나 마스크를 해제할 시그널 집합의 주소를 나타냄. oldset 이전 시그널 설정 값을 저장할 시그널 집합의 주소를 나타냄 함수 예제 #include #include #include #include int main(void) { sigset_t sig_set; int count; //sig..

    C / LINUX alarm(2)

    함수 기능 프로세스에 sigalrm을 전달하는 시스템호출 함수이다. 함수 원형 #include unsigned int alarm(unsigned int seconds); 함수 파라메터 seconds 타이머로 사용될 초 단위의 값 함수 예제 #include #include #include #include #define LINE_MAX 2048 static void ssu_alarm(int signo); int main(void){ char buf[LINE_MAX]; int n; if(signal(SIGALRM, ssu_alarm)==SIG_ERR){ fprintf(stderr,"SIGALRM error\n"); exit(1); } alarm(10); if((n=read(STDIN_FILENO, buf, L..

    C / LINUX raise(3)

    함수 기능 raise는 자기자신에게 시그널을 보내는 함수이다. ANSI C 에는 정의되어있으나 POSIX.1에는 정의되어 있지 않다 함수 원형 #include int raise(int sig); 함수 파라메터 sig signal을 넣으면 됨 함수 예제 #include #include #include void ssu_signal_handler1(int signo); void ssu_signal_handler2(int signo); int main(void){ if(signal(SIGINT, ssu_signal_handler1)==SIG_ERR){ fprintf(stderr,"cannot handle SIGINT\n"); exit(EXIT_FAILURE); } if(signal(SIGUSR1, ssu_sig..

    C / LINUX signal(2)

    함수 기능 지정한 시그널의 처리 방식을 등록하는 시스템 호출 함수이다. 함수 원형 #include sighandler_t signal(int signum, sighandler_t handler); 함수 파라메터 signal 인자에는 시그널 값을 넣는다. handler SIG_IGN 상수 , SIG_DFL상수, 시그널 발생시 호출될 함수의 주소를 넣을 수 있다. 함수 예제 #include #include #include #include static void ssu_signal_handler(int signo); int main(void){ if(signal(SIGINT, ssu_signal_handler)==SIG_ERR){ fprintf(stderr,"cannot handle SIGINT\n"); exi..