我正在尋找一種方法將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頭似乎表明,一個文件可能被設置了掛鉤函數來執行實際的讀寫。在我的情況下,我想我希望寫鉤子將一個字符串的副本附加到一個鏈表中,並且要有一個函數來計算列表的總長度,爲它分配內存,然後複製每個項目進入正確的地方。
我瞄準的東西,可以傳遞給一個功能,如do_some_stuff
沒有該功能需要知道任何東西,但它有一個FILE *
它可以寫入。
有沒有像這樣的現有實現?這似乎是一個有用的和C友好的事情要做 - 假設我是對的FILE
擴展性。
open_memstream正是我想要的。我不確定它是否使用鏈表方式,但我不會爲它編寫大量數據,因此無關緊要。 – Edmund 2009-11-16 19:32:34