Я могу записать указатель файла в файл с помощью функции fopen(). Но могу ли я сделать указатель на файл, который сделает так, чтобы вызывающие функции, такие как fputc или fprintf, записывали указатель в память? Примером этого является ByteArrayOutputStream в java. Также: могу ли я запустить его в обратном порядке, где библиотеке нужен указатель на файл для чтения, поэтому я выделяю память и создаю новый указатель на файл, который будет считываться из этой ячейки памяти, но возвращать EOF, когда заканчивается размер куска? (например, ByteArrayInputStream в Java). Есть ли способ сделать это в C? Например:
FILE *p = new_memory_file_pointer();
fprintf(p, "Hello World!\n");
char *data = get_written_stuff(p);
printf("%s", data); //will print Hello World!
& &/||
char s[] = "Hello World!\n";
FILE *p = new_memory_file_pointer_read(s, sizeof(s));
char *buffer = (char *)malloc( 1024*sizeof(char) );
fread((void *)buffer, 1, sizeof(s), p);
printf("%s", buffer); //prints Hello World!
РЕДАКТИРОВАТЬ: Тем, кто читает этот вопрос спустя годы, помимо принятого ответа, вы должны посмотреть open_memstream(3)
, который ведет себя скорее как эти классы Java, чем fmemopen
.