2012-04-20 9 views
6

Ho una libreria che consuma uno FILE * e trasmette i dati a un altro FILE *.Posso creare un FILE mappato in memoria * in C/Objective-C su iOS?

Voglio gestire sia l'input di questa libreria e l'output da questa libreria in memoria senza leggere/scrivere da/per un file sul disco.

Stiamo facendo questo in iOS - quindi eseguire la libreria come app separata e utilizzare stdin/stdout non è (per quanto ne so) un'opzione praticabile.

+0

c'è [fmemopen] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html) e [open_memstream] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream .html), ma non so se sono disponibili su iOS – Christoph

+0

No, non sono disponibili su iOS o OS X. –

risposta

4

Perché objC è un superset di C, tutto quello che dovete fare è #import/#include <stdio.h> per ottenere l'accesso alla funopen() che di per sé contiene le funzioni readfn, writefn, seekfn e closefn. E fwopen che ha un esempio che mostra come scrivere su due flussi in questo altro SO question.

Mac OSX e iOS non includono fmemopen e open_memstream perché sono apparentemente unportable linux functions.

+0

@KurtRevis, Ho cambiato la mia risposta di conseguenza. – CodaFi

+0

OK allora, esattamente come usi fopen() per ottenere un FILE * da un blocco di memoria, non da un file? –

+0

@KurtRevis fwopen e funopen potrebbero funzionare anche per la scrittura, in particolare su due file come mostrato [qui] (http://stackoverflow.com/a/1043871/945847) – CodaFi

2

Dai un'occhiata allo https://github.com/shyuep/pyhull/tree/master/src/fmemopen, l'ho provato io stesso su un Mac OS X 10.8.2 e funziona bene.

Gli stati autore dovrebbero funzionare anche su iOS.

+0

Ho provato a compilare la libreria di cui sopra sul mio mac e ottengo un errore 'error: nessuna funzione di matching per la chiamata a 'funopen'' ci sono dei flag speciali necessari? – pyCthon

+0

sono su 'Apple LLVM versione 5.0 (clang-500.2.79) (basato su LLVM 3.3svn)' se questo aiuta – pyCthon

Problemi correlati