사용범위
Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수
기능
C언어 표준 함수로 errno 에 설정된 오류를 stderr 로 출력할때 사용한다.
헤더
#include <stdio.h>
※ perror 함수 사용시 stdio.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※
함수
void perror(const char* errmsg);
파라미터
- const char* errmsg
- stderr 로 출력할 error message 를 입력한다.
반환값 (return)
없음 (void)
잡학지식
요즘은 errno 가 thread safe 하지만 전역변수를 사용한다는 점은 변하지 않았기 때문에 error 이후 또다른 error 발생시 해당 값들이 덮어씌워진다.
따라서 errno, ferror, perror, strerror 와 같이 전역 errno 를 사용하는 함수는 반드시 error 발생 직후 사용해야한다.
(아래 예시 코드 참고)
<소스 코드 1>
#include <stdio.h>
#define MAX_BUF_SIZE 128
int main() {
FILE *fp;
char buffer[MAX_BUF_SIZE] = {0,};
char *ret;
fp = fopen("not_exist.txt", "r");
if (fp != NULL) {
fclose(fp);
} else {
// fopen 함수 실패
perror("fopen error");
}
return 0;
}
※ 실행 결과
fopen error: No such file or directory
<소스 코드 2>
#include <stdio.h>
#define MAX_BUF_SIZE 128
int main() {
FILE *fp;
char buffer[MAX_BUF_SIZE] = {0,};
char *ret;
fp = fopen("not_exist.txt", "r");
if (fp != NULL) {
fclose(fp);
} else {
// fopen 함수 실패 직후 fgets 실패로 errno 덮어써짐
ret = fgets(buffer, MAX_BUF_SIZE, NULL);
if (ret == NULL) {
perror("fgets error");
}
}
return 0;
}
※ 실행 결과
fgets error: Invalid argument
반응형
'C언어 > stdio.h' 카테고리의 다른 글
[C언어] ferror 함수 (stdio.h) (0) | 2022.09.05 |
---|---|
[C언어] feof 함수 (stdio.h) (0) | 2022.09.04 |
[C언어] ftell 함수 (stdio.h, 파일 크기, stream 위치 구하기) (0) | 2022.09.02 |
[C언어] fseek 함수 (stdio.h, 파일 stream 오프셋 변경) (0) | 2022.08.31 |
[C언어] freopen 함수 (stdio.h) (0) | 2022.08.26 |