2012-04-20 5 views
6

Mam biblioteki, która zużywa FILE * i dane wyjściowe do innego FILE *.Czy mogę utworzyć plik MAPE odwzorowany w pamięci * w C/Objective-C na iOS?

Chcę obsłużyć zarówno dane wejściowe do tej biblioteki, jak i dane wyjściowe z tej biblioteki w pamięci bez odczytu/zapisu do/z pliku na dysku.

Robimy to w iOS - więc uruchamianie biblioteki jako oddzielnej aplikacji i używanie stdin/stdout nie jest (o ile mi wiadomo) realną opcją.

+0

jest [fmemopen] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html) i [open_memstream] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream .html), ale nie wiem, czy są one dostępne na iOS – Christoph

+0

Nie, nie są one dostępne na iOS lub OS X. –

Odpowiedz

4

Ponieważ ObjC jest rozszerzeniem C, wszystko co musisz zrobić, to #import/#include <stdio.h> aby uzyskać dostęp do funopen() co samo w sobie zawiera funkcje readfn, writefn, seekfn, a closefn. I fwopen, który ma przykład pokazujący, jak pisać do dwóch strumieni w tym innym SO question.

Systemy Mac OSX i iOS nie obejmują fmemopen i open_memstream, ponieważ są najwyraźniej unportable linux functions.

+0

@KurtRevis, zmieniłem odpowiednio odpowiedź. – CodaFi

+0

OK, jak dokładnie używasz fopen(), aby uzyskać PLIK * z bloku pamięci, a nie z pliku? –

+0

@KurtRevis fwopen and funopen również będzie działał przy pisaniu, szczególnie w dwóch plikach, jak pokazano [tutaj] (http://stackoverflow.com/a/1043871/945847) – CodaFi

2

Spójrz na https://github.com/shyuep/pyhull/tree/master/src/fmemopen, testowałem go samodzielnie na Mac OSX 10.8.2 i działa poprawnie.

Autor oświadcza, że ​​powinien również działać na iOS.

+0

Próbowałem skompilować powyższą bibliotekę na moim komputerze mac i otrzymuję komunikat o błędzie "błąd: brak pasującej funkcji dla wywołania" funopen'' czy są jakieś specjalne flagi potrzebne? – pyCthon

+0

Jestem na 'Apple LLVM wersja 5.0 (clang-500.2.79) (na podstawie LLVM 3.3svn)' jeśli to pomaga – pyCthon

Powiązane problemy