CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): HellCat (아가남편)
날 짜 (Date): 2002년 5월 22일 수요일 오후 12시 23분 13초
제 목(Title): Re: fread()관련 좋幸�입니다. (또 다시)


코드 세그먼트 자체가 단지 fopen 하고  fread 를 사용한다는 것 외에는
더이상 자세한 것을 알 길이 없기에 왜 에러가 나오는지 그리고
에러 자체가 어디에서 나오는 것인지도 정확히 알 수가 없네요.

단제 짐작으로 흔히들 접하는 에러를 알려 드리는 수 밖에 없지요.

위에서 다른 분이 말씀하진 struct 버퍼에 바로 캐스팅식으로 읽어 넣는
경우는 아마도 같은 시스템 아키텍쳐에서 그리고 같은 OS 에서 같은 콤파일러로
콤파일한 프로그램으로 똑같은 헤더를 사용해서 똑같은 struct 로
바로 file 에 쓴 경우에나 바로 읽었을때 그게 제대로 padding 문제나
얼라인먼트 문제가 생기지 않는다는 말씀일테구요. (덤으로 java 처럼
시리얼라이즈가 되질 않으니 바이트 오더 문제도 생길수 있구요 다른 
시스템에서 만들 file 일 경우).

그리고 또 다른 분이 말씀하신 경우는 읽기는 제대로 읽었으되
읽은 후의 값이 binary 즉 string 함수를 사용할수 없는 데이타에
string 함수를 사용하려 할때 에러가 나올수 있다는 말씀.

그냥 간단히

FILE *fp;
char buf[BUFSIZ];
int len;

fp = fopen (fname, "r");
while ((len = fread (buf, 1, BUFSISZ, fp)) > 0)
{
  ...
}
fclose (fp);

위와 같은 경우는 unstructured bin. file 경우 예인데요.
아마도 file copy 같은 것 이외에는 별 소용이 없는 코드일테구요.


bin 파일이라면 expected format 이 있을 테고.
아니면 그 file 을 create  한 프로그램과 같은 header 를 사용해서
읽어 오겠지요. 단지 어떤 struct 를 바로 file 에 써버렸을 경우
시스템 마다 각 field 얼라인먼트가 틀리수가 있고 바이트 오더링 문제도
있구요.. 자바처럼 자동으로 시리얼라이즈 할수도 없으니 잘 알아서 쓰고
읽으시는 수 밖에 없습니다.

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.