| [ 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 얼라인먼트가 틀리수가 있고 바이트 오더링 문제도 있구요.. 자바처럼 자동으로 시리얼라이즈 할수도 없으니 잘 알아서 쓰고 읽으시는 수 밖에 없습니다. |