2012-04-20 14 views
6

私はFILE *を消費し、別のFILE *にデータを出力するライブラリを持っています。iOS上のC/Objective-Cにメモリマップファイル*を作成できますか?

このライブラリへの入力と、このライブラリの出力を、ディスク上のファイルに読み書きすることなく、メモリ上で処理したいと考えています。

私たちはiOSでこれをやっているので、別のアプリとしてライブラリを実行し、stdin/stdoutを使っても実行可能なオプションはありません。

+0

[fmemopen](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html)と[open_memstream](http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream)があります。 .html)が、iOSで利用できるかどうかわかりません – Christoph

+0

いいえ、iOSまたはOS Xでは利用できません。 –

答えて

4

にObjCはCのスーパーセットなので、あなたがしなければならないすべては、それ自体が機能readfnが含まれていfunopen()へのアクセス、writefnseekfn、およびclosefnを得るために#import/#include <stdio.h>です。 fwopenには、この2つのストリームに書き込む方法を示す例があります。SO question

fmemopenopen_memstreamは明らかにunportable linux functionsであるため、Mac OSXとiOSにはfmemopenopen_memstreamが含まれていません。

+0

@KurtRevis、私はそれに応じて回答を変更しました。 – CodaFi

+0

それでは、fopen()を使ってファイルではなくメモリブロックからFILE *をどのくらい正確に取得しますか? –

+0

@KurtRevis fwopenとfunopenは、特にここに示すように2つのファイルに書き込むためにはうまくいくでしょう。[here](http://stackoverflow.com/a/1043871/945847) – CodaFi

2

https://github.com/shyuep/pyhull/tree/master/src/fmemopenを見て、私はMac OSX 10.8.2で自分自身でテストしましたが、うまくいきました。

著者は、iOSでも動作すると述べています。

+0

私のMacで上記のライブラリをコンパイルしようとしましたが、エラーが発生しました。 'エラー:' funopen 'を呼び出す関数がありません。 – pyCthon

+0

Apple LLVMバージョン5.0(clang-500.2.79)(LLVM 3.3svnに基づいています) 'もしそれが役立つなら – pyCthon

関連する問題