FILE *
을 어떤 함수에 전달하여 함수가 fprintf
으로 쓸 수있는 방법을 찾고 있습니다. 출력이 디스크의 실제 파일에 나타나기를 원한다면 이렇게하는 것이 쉽습니다. 하지만 대신에 모든 출력을 문자열 (char *
)으로 가져 오는 것이 좋습니다. 내가 좋아하는 것 API의 종류는 다음과 같습니다문자열을 생성하는 FILE * 스트림 만들기
/** Create a FILE object that will direct writes into an in-memory buffer. */
FILE *open_string_buffer(void);
/** Get the combined string contents of a FILE created with open_string_buffer
(result will be allocated using malloc). */
char *get_string_buffer(FILE *buf);
/* Sample usage. */
FILE *buf;
buf = open_string_buffer();
do_some_stuff(buf); /* do_some_stuff will use fprintf to write to buf */
char *str = get_string_buffer(buf);
fclose(buf);
free(str);
의 glibc 헤더 파일이 실제 읽기와 쓰기를 수행하기 위해 후크 기능을 설정할 수 있음을 시사한다. 필자는 필자가 쓰기 훅을 사용하여 문자열의 복사본을 링크 된 목록에 추가하고 목록의 전체 길이를 계산하는 get_string_buffer
함수를 사용하여 메모리를 할당 한 다음 각 항목을 복사합니다. 정확한 위치에 넣으십시오.
do_some_stuff
과 같은 함수에 전달할 수있는 것을 목표로하고 있습니다.이 함수는 쓸 수있는 것 이외의 다른 것을 알 필요가 없습니다. FILE *
.
이와 같은 기존 구현이 있습니까? 유용하고 C 친화적 인 것 같습니다. FILE
확장성에 대한 가정이라고 가정합니다.
open_memstream에 대한 필요성은 내가 원하는 것입니다. 연결된 목록 방식을 사용하고 있는지 확실하지 않지만 큰 금액을 쓰지 않아도 상관 없습니다. – Edmund