앞에서 본 것처럼 perror 함수는 현재 발생한 오류에 대한 상태 정보를 제공한다. 이 함수는 다음 문장과 효과가 같다.
fputs("fopen failed: some-diagnostic\n", stderr);
현재 발생한 오류를 해결하는 데 도움되는 상세 정보가 some-diagnostic에 해당하는 부분에 나올 수도 있다(반드시 그런 것은 아니다).
부록 K
경계값 검사를 수행하는 버전인 fopen_s와 freopen_s도 있다. 두 함수는 지정한 인수가 올바른 포인터인지 확인한다. 여기서 errno_t는 stdlib.h에서 정의하는 타입으로서 오류 리턴 값을 인코딩한다. restrict라는 키워드는 포인터 타입에만 적용할 수 있는데, 자세한 내용은 뒤에서 소개한다.
errno_t fopen_s(FILE* restrict streamptr[restrict], char const filename[restrict], char const mode[restrict]); errno_t freopen_s(FILE* restrict newstreamptr[restrict], char const filename[restrict], char const mode[restrict], FILE* restrict stream);
파일을 열 때 지정할 수 있는 모드는 'a'말고도 여러 가지가 있다. 표 8-4는 모드 인수로 지정할 수 있는 값을 간략히 보여 준다. 세 가지 기본 모드는 기존 파일을 처리하는 방법과 스트림의 위치를 지정한다. 여기에 세 가지 수정자(modifier)를 추가할 수 있다. 표 8-5는 모든 조합을 보여 준다.