`SIG_ERR` 매크로
SIG_ERR 매크로 (SIG_ERR)
신호(signal) 핸들러를 설치하는 signal 함수는 성공 여부를 포인터로 알려 줘요. 그런데 성공했을 때 돌아오는 값이 함수 포인터라서, '이게 진짜 함수 주소인지 아니면 에러인지'를 어떻게 구분할지 애매하죠. 그 애매함을 해결해 주는 표준 표식이 SIG_ERR이에요.
출처: cppreference
본문
매크로 정의
<signal.h>에 정의돼 있어요.
#define SIG_ERR /* implementation defined */
설명 (Explanation)
SIG_ERR은 void (*)(int) 타입의 값이에요. signal 함수가 이 값을 돌려줬다면 오류가 발생했음을 나타내요.
예제 (Example)
SIGTERM에 대한 핸들러를 설치하고, 그 반환값이 SIG_ERR인지 확인하는 전형적인 패턴이에요.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void signal_handler(int sig)
{
printf("Received signal: %d\n", sig);
}
int main(void)
{
/* Install a signal handler. */
if (signal(SIGTERM, signal_handler) == SIG_ERR)
{
printf("Error while installing a signal handler.\n");
exit(EXIT_FAILURE);
}
printf("Sending signal: %d\n", SIGTERM);
if (raise(SIGTERM) != 0)
{
printf("Error while raising the SIGTERM signal.\n");
exit(EXIT_FAILURE);
}
printf("Exit main()\n");
return EXIT_SUCCESS;
}
출력:
Sending signal: 15
Received signal: 15
Exit main()
같이 보기 (See also)
signal— 특정 신호에 대한 핸들러 설정SIG_DFL/SIG_IGN— 신호 처리 전략 상수