■ 리눅스에서 시스템콜 및 라이브러리 함수를 수행하다가 오류가 발생하면, 사용자의 프로그램으로 오류 결과를 넘겨준다.
- 사용자 프로그램에서는 함수의 리턴값을 조회함으로써 오류의 발생 여부를 확인할 수 있다.
- 일반적으로 오류 시 리턴값은 다음과 같다.
○ 시스템 콜 오류 시 리턴값 : -1
○ 라이브러리 함수 오류 시 리턴값 : NULL

(1) errno 변수
: 시스템콜은 오류가 나는 경우에 구체적인 원인을 나타내는 상수 값을 errno 변수에 저장한다.

- errno 변수에 설정되는 값은 /usr/include/asm/errno.h 헤어파일에 정의되어 있다.
- 사용자 어플리케이션에서 errno 변수를 사용하기 위해서는 #include<errno.h>를 반드시 포함해야 한다.
- errno와 연관된 추가적인 변수들도 stdio.h 파일에 선언되어 있다.

sys_nerr : 포함하고 있는 에러메시지의 개수
printf("sys_nerr = %d\n", sys_nerr);

sys_errlist : 포인터 배열로 에러메시지를 문자열로 저장
printf("%s\n", sys_errlist[0]);   // Success
printf("%s\n", sys_errlist[1]);   // Operation not permitted


(2) perror() 함수를 이용한 오류 메시지 출력
: 오류 메시지를 출력할 때 가장 널리 사용되는 함수는 perror()로 그 형식은 다음과 같다.

#include <stdio.h>
void perror(const char *s);
이때 매개 변수 s 에는 오류 메시지 앞에 덧붙이고 싶은 문자열을 전달하면 된다.

myperror.c 오류 메시지 출력 예

실행을 하면 ./myperror
open : No such file or directory perror에서 open을 썻기때문에 open 이라고 출력.


(3) strerror() 함수를 이용한 오류 메시지 출력
: 오류 메시지를 출력할때 널리 사용하는 함수는 strerror()로 그 형식은 다음과 같다.

#include <string.h>
char *strerror(int errnum);
errnum 에 맞는 오류 메시지 문자열을 리턴한다.
만일 잘못된 errnum을 인자로 넘겨주면 " Unknown error nnn " 문자열을 리턴한다.




출처 : http://babuzzzy.tistory.com/entry/2-시스템-정보-오류처리

'P rogramming > Linux System' 카테고리의 다른 글

파일 컨트롤 함수 :: fcntl()  (0) 2012.05.15
메모리 맵핑(mapping) - mmap() / munmap()  (8) 2012.04.24
파일 읽기 - read()  (0) 2012.03.06
파일 쓰기 - write()  (0) 2012.03.06
파일 오픈 - open() / creat()  (0) 2012.03.06
by 민트앤라떼 2012. 3. 6. 18:38