본문 바로가기
Language/C언어

C045_perror함수 사용하기

by OdOp 관리자 2024. 1. 3.
SMALL

perror는 Print a system ERROR message의 약자입니다. 

즉, 시스템의 에러를 출력하는 명령어입니다. 

 

errno는 정수형 변수로 이전에 발생한 오류에 대한 정보를 가지고 있습니다. 

즉, errno에 담긴 정보를 출력하는 함수입니다. 

 

이제 본격적으로 perror에 대해 알아보도록 하겠습니다. 

 

perror 함수

함수의 원형과 헤더 파일

#include <stdio.h>

void	perror(const char *str);

 

str이 NULL이 아니라면 str을 출력하고 ':'을 붙인 후에 현재 에러를 출력합니다. 

말로만 설명하면 힘드니 실행되는 것을 보여드리겠습니다. 

 

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int    main(void)
{
    int fd;

    fd = open("unexist", O_RDONLY);
    if (fd < 0)
        perror("This is file open error");
    close(fd);
    return (0);
}

위의 예시는 "unexist"파일을 열고자 했는데 실패를 하여 저희가 원하는 에러를 출력하게 되는 것입니다. 

에러 출력은 아래와 같습니다. 

This is file open error: No such file or directory

 

이번에는 저희가 임의적으로 에러를 만들어서 출력해 보도록 하겠습니다. 

앞에서 설명드렸다시피 에러가 발생 시에 errno에 정수값이 입력이 됩니다. 입력값에 따라 에러가 출력이 됩니다. 

errno를 사용하기 위해 "errno.h"헤더가 필요합니다. 

 

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

int    main(void)
{
    perror("before error");
    errno = ENOMEM;  //출력할 에러
    perror("errno = ENOMEM");  //에러 메시지 전 출력하는 문자열
    errno = EACCES;
    perror("errno = EACCES");
    errno = ENOENT;
    perror("errno = ENOENT");
    errno = ENOTDIR;
    perror("errno = ENOTDIR");
    errno = EFAULT;
    perror("errno = EFAULT");
    errno = EBADF;
    perror("errno = EBADF");
    return (0);
}

 

처음에 errno에는 아무것도 에러값을 저장을 하지 않았기 때문에 성공 메시지가 출력이 되고 그 외에는 저희가 설정한 errno에 맞게 에러가 출력이 됩니다. 

before error: Success
errno = ENOMEM: Cannot allocate memory
errno = EACCES: Permission denied
errno = ENOENT: No such file or directory
errno = ENOTDIR: Not a directory
errno = EFAULT: Bad address
errno = EBADF: Bad file descriptor

 

LIST

'Language > C언어' 카테고리의 다른 글

C047_access 함수 사용하기  (2) 2024.01.05
C046_exit 함수 사용하기  (0) 2024.01.04
C044_malloc 사용하기  (0) 2024.01.02
C043_가변인자 사용하기  (0) 2023.12.30
C042_Makefile 만들기  (2) 2023.12.29