System calls can fail in several ways. For instance:
In C, when a system call fails, it sets a global variable called errno (short for "error number"). Here’s what you need to know:
Global Variables and errno:
errno.h
to check for specific errors.Getting Useful Error Messages:
perror
takes a string as an argument and prints it followed by a descriptive error message based on the current value of errno.Be Careful with errno:
// BROKEN CODE
int x = someSystemCall();
if (x != 0) {
printf("someSystemCall() failed!\\\\n"); // may change errno
perror("The error was: ");
C 언어에서 시스템 호출을 사용할 때 오류가 발생하는 경우를 이해하는 것이 중요합니다. 아래는 주요 내용입니다:
시스템 호출 실패 가능성:
errno
—오류 번호:
errno
는 시스템 호출(또는 C 라이브러리 래퍼)이 실패할 때 설정되는 전역 변수입니다.errno
를 확인하여 특정 오류를 파악하고, errno.h
에 정의된 상수와 비교할 수 있습니다.perror
를 사용한 오류 메시지 출력:
왜 perror
를 사용할까요?: errno
의 숫자 값을 출력하는 것만으로는 충분하지 않습니다. perror
는 errno
에 기반한 설명적인 오류 메시지를 제공합니다.
사용법: perror
는 문자열 인수를 받아서 오류 메시지 앞에 출력합니다. 예:
perror("The error was: ");
errno
사용 시 주의사항:
전역 변수의 위험성: errno
는 전역 변수이므로, 다른 함수에 의해 의도치 않게 변경될 수 있습니다.
잘못된 코드 예시:
//잘못된 코드
int x = someSystemCall();
if (x != 0) {
printf("someSystemCall() failed!\\\\n"); //errno가 변경될 수 있음
perror("The error was: ");
}
문제점: printf
함수가 시스템 호출을 하여 errno
를 변경할 수 있어, perror
가 올바르지 않은 오류를 보고할 수 있습니다.