Faire un pointeur de fichier en lecture/écriture à un emplacement mémoire

Je peux faire un pointeur de fichier en écriture à un fichier avec fopen(). Mais ce que je peux faire un pointeur de fichier qui va faire en sorte d'appeler les fonctions telles que fputc ou fprintf écrira à un pointeur dans la mémoire? Un exemple de ceci est ByteArrayOutputStream en java. Aussi: je pourrais courir dans le sens inverse, où une bibliothèque a besoin d'un pointeur de fichier pour la lecture, j'ai donc allouer de la mémoire, et de faire un nouveau pointeur de fichier qui sera lu à partir de cet emplacement de la mémoire, mais de retour EOF lorsque la taille de la partie à court? (comme ByteArrayInputStream en Java). Est-il un moyen de le faire en C? Par exemple:

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!

EDIT: Pour ceux qui lisent cette question des années plus tard, en plus de la accepté de répondre, vous devriez regarder open_memstream(3), qui se comporte plus comme ces classes Java que fmemopen n'.

  • Juste pour être clair, lorsque vous utilisez fopen(), vous ne créez pas un pointeur vers le fichier, mais un pointeur vers une structure qui représente ce fichier.
  • M je sais. J'ai juste utilisé le terme de Pointeur de Fichier
  • Double Possible de Comment faire pour écrire dans une mémoire tampon avec un FICHIER*?
  • Êtes-vous sérieux en essayant de marquer un six-année-vieille question comme une copie d'un huit-année-vieille question qui n'a pas accepté de répondre?
  • Ne pas les éditeurs ont de meilleures choses à faire avec leur temps?
InformationsquelleAutor Leo Izen | 2011-02-27