위 코드는 fclose()를 두번 호출하고 있다. 아마도 두번째 호출에서 문제가
발생할 것이다. 필자의 리눅스 박스에서는 세그멘테이션 오류가 발생하면서
프로그램이 종료되었다.
위의 문제를 해결하기 위해서 다음과 같은 매크로 함수를 만들었다.
#define Fclose(a) if (a != NULL) \
{\
fclose(a); \
a = NULL; \
}
위의 함수는 fclose()를 호출하기 전에 우선 스트림이 NULL인지를 확인하고 NULL이라면
이미 닫혀진 스트림으로 가정하고 그냥 넘어간다. 만약 NULL이 아니라면 열려있는
스트림이라고 판단하고 fclose()를 호출한다. fclose()를 호출한 후에 닫혀진 스트림이라는
걸 확인시키기 위해서 스트림이 NULL을 가르키도록 한다.
1장. fclose(3)
열린 파일 스트림(stream)을 닫는다.
1.1. 사용법
1.2. 설명
fclose()함수는 stream으로 연결되어 있는 파일의 스트림 연결을 끊는다. 만약 닫고자 하는 스트림이 출력을 위해 열려져있던 스트림이라면 fflush(3)를 이용해서 버퍼에 있는 데이터를 모두 써야 한다.
1.3. 반환값
성공하면 0을 리턴한다. 실패했을 경우는 EOF를 리턴하고 errno를 설정한다.
1.4. 에러
잘못 연결된 stream이다.
1.5. 예제
위의 문제를 해결하기 위해서 다음과 같은 매크로 함수를 만들었다.
1.6. 참고문헌
fopen(3)
fflush(3)
fdopen(3)
stdio.h 사용하기
Recent Posts
Archive Posts
Tags