Language/C C언어 강좌 ( 오류처리 / errno / strerror / strerror_r )
  • 728x90
    반응형

     


     

     

    C언어


     

     

    오류처리

    error

     

    ㆍerror 은 <errno.h> 에 다음과 같이 정의되어 있다.

     

    extern int errno;

     

    선행처리기 문자열 정의 설명
    E2BIG 너무 긴 인수 목록
    EACCESS 접근 거부
    EAGAIN 재시도
    EBADF 잘못된 파일 번호
    EBUSY 이미 사용 중인 디바이스나 자원
    ECHILD 자식 프로세스 없음
    EDOM 함수 영역을 넘어선 수학 인수
    EEXIST 이미 존재하는 파일
    EFAULT 잘못된 주소
    EFBIG 너무 큰 파일
    EINTR 인터럽트가 걸린 시스템 호출
    EINVAL 유효하지 않은 인수
    EIO 입출력 오류
    EISDIR 디렉터리임
    EMFILE 열린 파일이 너무 많음
    EMLINK 너무 많은 링크
    ENFILE 파일 테이블 넘침
    ENODEV 그런 디바이스 없음
    ENOENT 그런 파일이나 디렉터리 없음
    ENOEXEC 잘못된 실행 파일 형식
    ENOMEM 메모리 부족
    ENOSPC 디바이스에 남은 공간 없음
    ENOTDIR 디렉터리 아님
    ENOTTY 부적절한 입출력 제어 연산
    ENXIO 허용되지 않은 연산
    EPIPE 파이프 깨짐
    ERANGE 너무 긴 결과
    EROFS 읽기 전용 파일시스템
    ESPIPE 유효하지 않은 탐색
    ESRCH 그런 프로세스 없음
    ETXTBSY 이미 사용중인 텍스트 파일
    EXDEV 적절하지 않은 링

     

    ㆍ리눅스에는 다음경로에 위 테이블의 값들이 define 되어 있다.

     

    경로: /usr/include/asm

     

     

     

    EX) Semple code

     

     

    실행결과 :

     

     

     

    ㆍerrno 는 에러 발생시 값을 바꾸어 해당 에러 메시지를 가진다.

     

    ㆍC 라이브러리 또한 strerror()strerror_r() 함수도 제공한다.

     

    #include <string.h>
    char * strerror(int errnum); 
    #include <string.h>
    strerror_r(int errnum, char *buff, size_t len)

      

    EX) Semple code

     

     

    프로그램 설명 :

     

    ㆍ10 line: E2BIG를 넣었지만 fsync()함수의 잘못된 에러 로인해 메시지가 변환되었다.

     

    ㆍ12 line: strerror 이 반환하는 에러메시지 주소를 printf로 받아 출력.

       

    ㆍ13 line: char포인터 p 변수로 strerror의 반환 주소를 받아 printf로 출력.

     

    실행결과 :

     

     

     

     

     

     

     

     

    728x90
    반응형
상단으로