파일에 데이터를로드/저장하기 위해 작업중인 프로젝트의 경우 다른 파일 io 라이브러리에 비해 일부 기능 때문에 iostream 라이브러리를 구현하기로 결정했습니다. 이러한 기능 중 하나는 파생 된 fstream 또는 stringstream 클래스를 사용하여 파일 또는 메모리에 이미 존재하는 장소에서 데이터를로드 할 수있는 기능입니다. 지금까지 하나의 주요한 후퇴가 있었지만 잠시 동안 정보를 얻는데 어려움을 겪고있었습니다.C++ iostream 클래스 잘라 내기
POSIX 라이브러리에서 사용할 수있는 기능과 비슷하게 truncate 또는 ftruncate 함수의 구현을 찾고있었습니다. 문자열 스트림의 경우, 다른 크기로 다시 생성 한 후에 연관된 문자열을 다시 스트림으로 전달하는 것만 큼 쉽습니다. fstream의 경우,이 클래스에서 파일 핸들을 가져올 방법을 찾을 수 없기 때문에 실제로이 작업을 수행하는 방법을 찾지 못했습니다. 나에게 fstream 문제에 대한 해결책을 제공하는 것은 좋지만이 문제에 대한 더 나은 해결책은 iostream 친숙해야 할 것입니다. 두 스트림 클래스의 모든 사용법은 프로그램에서 iostream을 통과하기 때문에 전체 클래스를 변경하려고 할 때마다 어떤 클래스가 스트림을 제어하는지 알아 내야 만 기본 클래스를 통해 쉽게자를 수 있습니다.
다른 방법으로는 내가 찾고있는 이러한 모든 기능을 구현하는 라이브러리로 누군가를 안내 할 수 있고 iostream을 대체하는 것이 쉽지만 훌륭한 해결책이기도합니다.
편집 : 명확한 설명을 위해, 사용하고있는 iostream 클래스는 stringstream 및 fstream 클래스 만 사용하는 경향이 큽니다. 실제로 파일 자체 만 특정 지점으로 잘려야 할 필요가 있습니다. 스트림을 첨부 한 streambuf의 유형을 알 필요가없는 더 간단한 방법을 찾고있었습니다. 대답이 제안했듯이, fstream과 함께 ftruncate를 사용하는 방법을 살펴보고 두 가지 특정 경우를 처리합니다. 프로그램의 최종 사용자가 스트림 클래스를 보지 않아야합니다.
당신의 목표는 무엇입니까? 스트림에 쓸 수있는 양을 제한 하시겠습니까? 이것은'std :: streambuf '필터링으로 쉽게 할 수 있습니다. 사실을 잘라낸 것은 데이터가 기록 된 위치에 따라 다르며 분명히 모든 스트림에 대해 수행 할 수 있습니다. 예를 들어, 콘솔이나 소켓에 글자를 쓴다면 다시 가져올 방법이 없습니다. –