2012-01-08 4 views
0

파일의 시작 부분에서 바이트 수를 편집하거나 "X 배의 sizeof (int) 영역"에서 점프하는 쓰기 작업을 수행하는 것과 같이 바이너리 파일에 대한 연산을 수행해야합니다. 실제 코드 스 니펫에 관심이 없으며 사용할 수있는 기능이 무엇인지 알아야합니다. 이것은 fseek를위한 일입니까? 내 메모리에있는 파일의 데이터를로드하지 않는 것이 중요합니다.바이너리 파일 C에서의 연산

답변

2

예, 이것은 fseek()의 직업입니다.

파일의 중간에 쓰기는 기존 데이터를 덮어 씁니다. 추가하려는 금액만큼 모든 후속 데이터를 이동해야합니다.

+0

중간에 특정 오프셋을 지정하면 단순히 덮어 씁니까? – andrei

+0

@andrei yes - 파일의 내용을 변경하려면 필요한 내용을 쓰고 끝에 (원자 적으로) 이름을 바꾸는 새 파일을 만드는 것이 좋습니다. 이것은 일반적인 프로세스이지만 함정이 가득합니다. 적절한 해결책을 찾기 위해이 문제에 대해 Google에 알려주십시오. – fge

1

fseek()을 사용할 수 있지만 mmap()도 있습니다. 후자의 장점은 파일의 현재 포인터를 신경 쓸 필요가 없다는 것입니다. 오프셋을 사용하여 탐색 할 수있는 메모리 영역 일뿐입니다.

문제 : 아니요, Windows 용은 mmap()입니다. 그리고 데이터를 넣으려면 데이터를 입력하는 것이 가장 좋은 방법은 아닙니다.

+0

내가 선택한 성능에 관심이 있습니까? – andrei

+0

더 효율적으로 사용할 수 있다면 문제가되지 않습니다. – andrei

+0

글쎄,'mmap()'은 당신이 읽기/쓰기를 위해 syscall을 사용하지 않는다는 장점이 있습니다. 그러나 데이터를 삽입하려는 경우 @AdamZalcman이 올바르게 언급하기 때문에 실제로 적합하지 않습니다. – fge