seekg/seekp를 통해 관리되는 별도 get/put 위치로 std :: iostream 인터페이스를 사용하여 임의 액세스 바이너리 파일을 업데이트하려고합니다. 모든 것이 stringstream에서 잘 작동하지만, Boost.Iostream (특히 boost :: iostreams :: stream < boost :: iostreams :: file_descriptor >)을 사용하여 파일 설명자 기반 스트림을 만들면 get/put 위치는 더 이상 독립적이지 않습니다.file_descriptor를 사용하여 dual-seekable Boost Iostream을 생성 할 수 있습니까?
Modes의 설명서에서 "Dual-seekable"스트림을 찾고 있다고 생각합니다. 문서에서는 Mode가 stream의 템플릿 매개 변수 인 "주로 내부 용"임을 보여 주지만 더 이상 맞지 않습니다. 대신, 모드 (? 일명 카테고리) 장치에서 직접 가져온 것입니다
template< typename Device,
typename Tr = ...,
typename Alloc = ...>
struct stream : detail::stream_base<Device, Tr, Alloc> {
public:
typedef typename char_type_of<Device>::type char_type;
struct category
: mode_of<Device>::type,
closable_tag,
detail::stream_traits<Device, Tr>::stream_tag
{ };
차 질문 : 시크하지만 이중되지 태그가 같은 file_descriptor 같은 장치에서 듀얼 시크 동작을 (얻을 수있는 방법이 있나요 - 선택 가능)?
보조 질문 : seekg/seekp의 독립성에 대한 일반적인 보장이 있습니까? 웹 검색에서 stringstream이 독립적 인 것처럼 보이지만 fstream은 그렇지 않을 수도 있습니다. 그러나 나는 권위있는 것을 찾을 수 없다.
Boost.Iostream 코드에 대한 답변과 추가 정보를 바탕으로 boost :: iostreams :: file_descriptor의 자체 버전을 롤백해야하는 것처럼 들립니다. 한편으로 구현할 수있는 방법은 3 가지뿐입니다. 다른 한편으로는 Windows/POSIX 이식성을 위해 모든 "#ifdef BOOST_IOSTREAMS_WINDOWS"항목을 복제해야합니다. (이 스트림은 OS 고유의 API를 사용하여 만든 임시 파일에 액세스하는 데 사용됩니다.) 어쨌든 도움을 주셔서 감사합니다! –