컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post [C언어] 출력을 파일로 저장할 때는 printf() 가 아닌 fprintf() 함수를비주얼 베이직 스크립트 (VBS / VBScript) 의 기초: 간단한 메시지 박스 예제[QnA] VBS (VBScript) 란? / VBS 는 바이러스 파일인가요?웹페이지(HTML)를 그림과 함께 통째로 저장하기[QnA] 컴퓨터가 잠깐 잠깐씩 먹통이 됩니다 / 멈춥니다[보안] 무료 방화벽(Firewall) 소프트웨어: 존알람 ZoneAlarm 프리웨어 버전...[포토샵] 사진을 흑백으로 변환: 그레이스케일/듀오톤/비트맵/채도 조절 등으로 [Photo...[포토샵/Photoshop] 스냅샷(Snapshot) 기능이란? 취소와 비교 작업을 편리하...[QnA] 유니코드 (Unicode) 의 BOM (Byte Order Mark) 이란?'리틀 엔디안 little-endian 유니코드'와 '빅 엔디안 big-endian 유니코...

[C언어/기초] fopen() 과 fprintf() 함수의 에러 검사 코드

Tuesday, May 23, 2006

아래에 있는 C언어 소스는 "[C언어] 출력을 파일로 저장할 때는 printf() 가 아닌 fprintf() 함수를"에 있는 간단한 예제에, "에러 검사"를 추가한 버전입니다:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  FILE *out;


  if ( (out = fopen("test.txt", "w")) == NULL) {
    fprintf(stderr, "Error! Cannot open file...\n");
    exit(1);
   }

  if (fprintf(out, "하하하하 %d\nABCD", 1 + 1) == EOF) {
    fputs("Error! Cannot write file...\n", stderr);
    exit(2);
  }

  fcloseall(); // 모든 파일 한꺼번에 닫기
  return 0; // 성공했으니 제로를 반환하며 끝냄
}



fopen() 함수에서 에러가 날 개연성이 가장 높기 때문에 반드시 에러 검사를 해야 합니다. fopen()이 파일 열기에 실패하면 NULL 을 반환합니다.



에러가 나면 에러 메시지를 화면에 출력하는데, fprintf(stderr, "Error! Cannot open file...\n"); 에서 stderr 는 "표준 에러 출력"을 의미하는 가상 파일입니다.

그냥 printf() 함수 등으로 화면에 에러 메시지를 출력하면 곤란합니다. 왜냐하면 재지향을 하고 있을 때에는 에러 메시지가 보이지 않게 되어 버리기 때문입니다. stderr 는 재지향이 되지 않기 때문에, stderr 로 출력하면 항상 에러 메시지가 잘 보이게 됩니다.

즉 fprintf(stderr, ... 라는 것은 파일로 출력하는 것이 아니라 화면으로 출력하는 것입니다.



exit() 함수는, 모든 파일을 닫고, 프로그램을 완전히 끝내는 동시에, 시스템에 에러 코드를 반환하는 함수입니다.

모든 프로그램은, 성공적으로 끝나면 0(제로)를 반환하며 끝내고, 그렇지 않으면 "0이 아닌 정수"를 반환하며 끝내야 합니다.

fputs() 함수는 fprintf() 함수의 좀더 간단하고 빠른 버전입니다.





테스트



에러 검사 코드를 작성했으면, 일부러 에러를 내어서, 에러 검사 코드가 잘 작동하는지 알아보아야 합니다.

test.txt 라는 출력 결과 파일을 "읽기 전용"으로 만든 후, foo.exe 를 다시 실행시키면

D:\Z>foo.exe
Error! Cannot open file...

D:\Z>


이렇게 에러 메시지가 나와야 정상입니다.


그런데 fprintf(out, ... 이 부분에서 인위적으로 에러를 일으키는 방법은 찾지 못했습니다. 하드 디스크에 문제가 있을 때에만 fprintf(out, ... 에서 에러가 만들어질 것입니다.



0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top