Unix의 시스템 수준 함수가 에러를 만날 경우에는 대개 -1을 리턴하고 errno를 세팅해서 무엇이 잘못되었는지를 나타내게 된다.
예를 들어 fork 함수를 실행할 때는 다음과 같이 에러를 처리한다.
if ((pid = fork()) < 0)
{
fprintf(stderr, "fork error %s\n", strerror(errno));
exit(1);
}
strerrno 함수는 errno의 특정 값과 연계된 에러를 설명하는 텍스트 스트링을 리턴한다. 이 코드를 다음과 같이 에러 리포트 함수를 정의해서 약간 단순화할 수 있다.
void unix_error(char *msg)
{
fprintf(stderr, "%s: %s\n", msg, strerror(errno));
}
unix_error 함수를 통해 직전의 fork 함수를 다음과 같이 줄일 수 있다.
if (pid = fork() < 0)
unix_error("Fork error");
이 함수를 에러 핸들링 랩퍼를 통해 더 단순화할 수 있다. 랩퍼 함수는 기존 fork 와 동일한 인자를 받아 프로세스를 복제하지만 추가적으로 에러를 체크해서 만일 문제가 있다면 종료한다.
pid_t Fork(void)
{
pid_t pid;
if ((pid = fork()) < 0)
unix_error("Fork error");
return pid;
}
이 랩퍼를 호출할 경우 fork로 호출하는 것이 하나의 합축된 라인으로 줄어든다.
pid = Fork();
'CS > OS' 카테고리의 다른 글
프로세스를 이용한 동시성 프로그래밍 (0) | 2022.12.07 |
---|---|
프로세스 제어 (0) | 2022.12.07 |
컨텍스트 스위치 (0) | 2022.12.06 |
프로세스 (0) | 2022.12.06 |
Exception Control Flow 소개 (0) | 2022.12.06 |