fread()와 fwrite()사용도중... 일..
글쓴이: dexaboud3 / 작성시간: 수, 2013/12/04 - 2:41오후
#include<stdio.h> void main(){ FILE*fp=fopen("binary.bin","wb"); FILE*fp2=fopen("binary.bin","rb"); int i; int c=1; int count; if(fp==NULL || fp2==NULL){ puts("파일오픈 실패!!"); return; } printf("숫자: %d\n", c); count=fwrite((void*)&c,sizeof(int),1,fp); printf("쓴 숫자의 갯수: %d\n", count); //fseek(fp,SEEK_SET,0); 또는 fclose(fp);; count=fread((void*)&i,sizeof(int),1,fp2); printf("읽은 숫자 갯수: %d\n", count); printf("숫자: %d\n",i); //fclose(fp); fclose(fp2); return; }
제가 바이너리파일에서 불러들여온 데이터가 제대로 왔는지 확인하기 위해서 만든 코드인데요.
위에 있는 주석을 해제하고 아래있는주석을 냅두면 컴파일이 잘되는데....
반대로 하면 왜 fread()함수가 읽지를 못할까요?
제가 알기로 파일위치지시자는 스트림마다 따로 있는걸로 아는데 fp스트림이 왜 fp2스트림에 영향을 끼치는 거죠? ... 너무 답답해서 올립니다...!!
Forums:
fwrite()가 님께서 의도하신 것과는 다르게
fwrite()가 님께서 의도하신 것과는 다르게 실시간으로 파일을 기록하지 않기 때문입니다.
성능 향상을 위해서 몇 바이트짜리 쓰기 요청을 매 번 수행하지 않고, 일정량 이상 버퍼에 모이길 기다리거나, 파일이 닫길 때 기록합니다.
setvbuf(), fflush() 등의 함수 설명을 읽어보시는 것도 도움이 될 겁니다.
도움 많이 되었습니다.
저는 바로바로 파일에 쓸줄알았는데.....
그게 아닌것이군요... ㅠㅠ
fflush()나, fclose를 이용하니 바로 해결되었습니다!..
감사합니다
heeeesang
댓글 달기