I can make a file pointer write to a file with fopen(). But can I make a file pointer that will make it so calling functions such as fputc or fprintf will write to a pointer in memory? An example of this is ByteArrayOutputStream in java. Also: could I run it in reverse, where a library needs a file pointer to read from, so I allocate memory, and make a new file pointer that will read from this memory location but return EOF when the size of the chunk runs out? (like ByteArrayInputStream in Java). Is there a way to do this in C? For example:
FILE *p = new_memory_file_pointer();
fprintf(p, "Hello World!
");
char *data = get_written_stuff(p);
printf("%s", data); //will print Hello World!
&& / ||
char s[] = "Hello World!
";
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!
EDIT: To those reading this question years later, in addition to the accepted answer, you should look at open_memstream(3)
, which behaves more like these Java classes than fmemopen
does.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…