System Call Error Handling: 두 판 사이의 차이

youngwiki
편집 요약 없음
편집 요약 없음
1번째 줄: 1번째 줄:
[[분류:컴퓨터 시스템]]
[[분류:컴퓨터 시스템]]
ㅁㅇㄴㄹ
==개요==
유닉스 시스템 수준의 함수가 오류를 만나면 일반적으로 -1을 반환하고 전역 정수 변수 errno를 설정하여 그 원인을 지시한다. System Call Error Handling을 위해서는 해당 특성을 이용하여 모든 시스템 수준 함수의 return status를 반드시 확인해야 한다.<ref>예외는 void를 반환하는 몇몇 함수들 뿐이다.</ref>
 
==fork() 함수를 통한 예시==
아래는  fork() 함수를 호출하고 오류를 확인하는 코드이다.
<systaxhilight lang = "c">
if ((pid = fork()) < 0) {
    fprintf(stderr, "fork error: %s\n", strerror(errno));
    exit();
}
</syntaxhilight>
이때 streerror 함수는 errno값을 인자로 받아서 관련된 오류를 설명하는 텍스트 문자열을 반환한다.
이를 이용해 unix_error(char* msg)함수를 새로 정의하여 위 코드를 간소화 할 수 있다.
<systaxhilight lang = "c">
void unix_error(char *msg) /* Unix-style error */ {
    fprintf(stderr, "%s: %s\n", msg, strerror(errno));
    exit(0);
}
</syntaxhilight>
<systaxhilight lang = "c">
if ((pid = fork()) < 0)
    unix_error("fork error");
</syntaxhilight>

2025년 3월 11일 (화) 18:32 판

개요

유닉스 시스템 수준의 함수가 오류를 만나면 일반적으로 -1을 반환하고 전역 정수 변수 errno를 설정하여 그 원인을 지시한다. System Call Error Handling을 위해서는 해당 특성을 이용하여 모든 시스템 수준 함수의 return status를 반드시 확인해야 한다.[1]

fork() 함수를 통한 예시

아래는 fork() 함수를 호출하고 오류를 확인하는 코드이다. <systaxhilight lang = "c"> if ((pid = fork()) < 0) {

   fprintf(stderr, "fork error: %s\n", strerror(errno)); 
   exit();

} </syntaxhilight> 이때 streerror 함수는 errno값을 인자로 받아서 관련된 오류를 설명하는 텍스트 문자열을 반환한다.

이를 이용해 unix_error(char* msg)함수를 새로 정의하여 위 코드를 간소화 할 수 있다. <systaxhilight lang = "c"> void unix_error(char *msg) /* Unix-style error */ {

   fprintf(stderr, "%s: %s\n", msg, strerror(errno));
   exit(0); 

} </syntaxhilight> <systaxhilight lang = "c"> if ((pid = fork()) < 0)

   unix_error("fork error");

</syntaxhilight>

  1. 예외는 void를 반환하는 몇몇 함수들 뿐이다.