2012-04-20 4 views
6

J'ai une bibliothèque qui consomme un FILE * et des données de sortie à un autre FILE *.Puis-je créer un FICHIER * mappé en mémoire dans C/Objective-C sur iOS?

Je veux gérer à la fois l'entrée de cette bibliothèque et la sortie de cette bibliothèque en mémoire sans lire/écrire depuis/vers un fichier sur le disque.

Nous faisons cela dans iOS - l'exécution de la bibliothèque en tant qu'application séparée et en utilisant stdin/stdout n'est pas (autant que je sache) une option viable.

+0

il y a [fmemopen] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html) et [open_memstream] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream .html), mais je ne sais pas si elles sont disponibles sur iOS – Christoph

+0

Non, elles ne sont pas disponibles sur iOS ou OS X. –

Répondre

4

Parce que ObjC est un surensemble de C, tout ce que vous avez à faire est #import/#include <stdio.h> pour accéder à la funopen() qui contient lui-même les fonctions readfn, writefn, seekfn et closefn. Et fwopen qui a un exemple montrant comment écrire à deux flux à cet autre SO question. Mac OSX et iOS ne comprennent pas fmemopen et open_memstream car ils sont apparemment unportable linux functions.

+0

@KurtRevis, j'ai changé ma réponse en conséquence. – CodaFi

+0

OK alors, comment exactement utilisez-vous fopen() pour obtenir un FICHIER * à partir d'un bloc de mémoire, pas un fichier? –

+0

@KurtRevis fwopen et funopen fonctionnerait aussi bien pour l'écriture, en particulier pour deux fichiers comme indiqué [ici] (http://stackoverflow.com/a/1043871/945847) – CodaFi

2

Jetez un oeil à https://github.com/shyuep/pyhull/tree/master/src/fmemopen, je l'ai testé moi-même sur un Mac OSX 10.8.2 et ça marche bien. Auteur indique qu'il devrait également fonctionner sur iOS.

+0

J'ai essayé de compiler la bibliothèque ci-dessus sur mon mac et j'obtiens une erreur 'erreur: aucune fonction correspondante pour l'appel à 'funopen' 'y at-il des drapeaux spéciaux nécessaires? – pyCthon

+0

je suis sur 'Apple LLVM version 5.0 (clang-500.2.79) (basé sur LLVM 3.3svn)' si cela aide – pyCthon

Questions connexes