binary I/O

바이너리 입출력: 바이트 크기와 위치 계산이 계약

std::ios::binary, write(), read(), seekg(), tellp()가 같은 바이트 기준을 공유해야 재현 가능한 파일이 됩니다.

std::ios::binary

문자 변환 없이 바이트를 그대로 저장하는 모드입니다

텍스트 줄바꿈 변환이 끼면 구조체 크기와 포인터 위치 계산이 흔들립니다.

write/read

바이너리 입출력 바이트 수

sizeof 결과와 대상 타입을 함께 남기면 잘린 레코드를 빨리 찾습니다.

POD 구조체

구조체 저장 한계

포인터나 가변 길이 문자열은 그대로 저장해도 의미 있는 데이터가 되지 않습니다.

seekg/seekp

파일 포인터 이동은 레코드 단위 접근의 기준점입니다

tellg와 tellp로 이동 후 위치를 읽으면 잘못된 오프셋을 줄일 수 있습니다.

크기 sizeof(struct)와 실제 파일 길이를 비교해 레코드 개수를 계산합니다.
배치 컴파일러 패딩이 바뀌면 같은 구조체라도 파일 호환성이 깨질 수 있습니다.
위치 읽기 포인터와 쓰기 포인터를 혼동하면 이전 레코드를 덮어쓸 수 있습니다.