fclose() 질문사항입니다.
제가 printf 문을 이용해서 디버그 내용들을 확인하고 있습니다.
프로그램이 멈추는 곳을 알아보기 위해서 printf 문을 사용해서 디버그 메세지를 표시하도록 했는데....
fclose(fp); 이 부분이 실행이 되지 않아서 질문을 올립니다.
우선 파일을 읽고 쓰고 하는 작업이 이루어지는 부분에서 확인을 한결과 fclsoe(fp) 부분후에 프로그램이 멈추는것을 확인했습니다.
int functionA(void) { FILE *fp; int buf[10] = {0}; fp = fopen("test.txt", "rb"); fread(buf, 1, sizeof(buf), fp); fclose(fp); buf[2] = 5; fp = fopen("test.txt", "wb"); printf("file open\n"); fwrite(buf, 1, sizeof(buf), fp); printf("write data\n"); fclose(fp); // <= 여기에서 멈춤 printf("file close\n"); }
file open 하고 데이터를 읽어서 file close 를 해줍니다.
그 다음에 읽은 데이터에 변경된 값을 넣어서 다시 파일을 open 하게 되고 변경된 데이터를 다시 같은 파일에 써 넣습니다. 그리고 다시 파일을 close 하게 되는 루틴을 작성을 했는데 첫번째 읽기 위한
file open과 file close 는 멈추는 현상이 없습니다.
그런데 마지막에 있는 fclose 함수 밑의 file close 라는 메세지가 나타나야 하는데 나타나지 않게 됩니다.
이 함수를 여러번 호출을 하게 되는데 처음 몇번은 에러 없이 디버그 메세지가 화면에 나타나지만 어느 정도 수행하게 되면 디버그 메세지가 화면에 나타나지 않게 됩니다. 프로그램이 멈추는 현상이 되게 되는데 수행하는 횟수는 대중없습니다.
그런데 errno 를 보기 위해서 추가를 했더니 아직까진 나타나지 않습니다. 무었대문에 이런 현상이 나타나는지 너무 갑갑하네요..
고수님들의 답변부탁드립니다.
언제나 고운 하루 보내세요~~
fopen 한후의 fp 값이 NULL 인지 확인하는 구문을 넣으시는 것이
fopen 한후의 fp 값이 NULL 인지 확인하는 구문을 넣으시는 것이 좋을듯 싶습니다.
그리고 보다 정확한 원인을 확인하시려면 gdb 등의 디버깅 툴을 사용하셔야 할듯 합니다.
일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.
댓글 달기