어떻게하면 C 파일에서 C++ streambuf 개체를 가져 와서 FILE 개체의 버퍼를 사용하여 동일한 기본 파일을 가리키는 동안 두 개체가 별도의 버퍼를 관리하지 않도록 할 수 있습니다.FILE 개체가 가리키는 버퍼 (및 버퍼 상태)를 공유하는 C FILE *에서 C++ streambuf 개체를 만드는 방법은 무엇입니까?
표준 방법이없는 것처럼 보입니다.
Boost에는 파일 설명자를 사용하는 생성자가있는 stream_buffer 클래스가있어 C 코드로 열린 파일에서 C++ 기능을 사용할 수 있습니다. 예를 들어
boost::iostreams::stream_buffer<boost::iostreams::file_descriptor_sink> mysb (fileno(myFileptr), boost::iostreams::never_close_handle));
myFileptr
*이 입력 파일의 존재. 문제는 mysb
이고 myFileptr
이 가리키는 FILE 개체가 별도의 버퍼를 유지하므로이 옵션이 없음 ...
여기 내 문제의 컨텍스트가 있습니다. C 인터페이스 (모든 내 보낸 변수, 함수 인수 및 함수 반환 값은 C 유형이 있어야 함)를 사용하여 동적으로 링크 가능한 라이브러리를 제공해야하지만 라이브러리는 실제로 C++로 개발됩니다.
내가 내부적으로
Void MyExportedFunct(FILE* myfile)
가 그리고, 나는 C 프로그램에서 라이브러리를 가져올이 프로토 타입, C++ 스트림 기능을 사용하여 함수를 내보내는 경우 : 나는에 데이터를 싶습니다
int main()
{
FILE * fptr = fopen(“SomeFile”, "w");
fprintf(fptr, “Some data.”)
MyExportedFunct(fptr);
fprintf(fptr, “Some more data…”)
return 0;
}
실제로 올바른 순서로 전송 된 파일에 쓰여질 수 있습니다 (인터리브 문자 제외).
이를 달성하는 방법이나 다른 접근 방법에 대한 제안은 언제나 환영합니다.
스마트 따옴표 이것은 실제 코드가 아닙니다. C 태그를 제거하고 복원하는 것에 대해 사과드립니다. –
@WeatherVane 나는 틀렸다고 확신하지 못합니다. 이것은 C++에 대한 질문입니다. C에서 상속 된 기능을 사용한다는 사실은 관련성이 없어야합니다. –
@ MarkRansom 질문에 C가 언급되었을 때 나는 C 태그를 제거하기 위해 최근에 내려졌습니다. 여기서 OP는 C 프로그램에서 라이브러리를 가져오고 있습니다. –