2012-09-03 19 views
8

私はここにプレーンCで小さなプログラムを書いています。 私が必要とするのは、メモリに直接ファイルを作成することです(ハードディスクには書き込まれません) 現在、ファイルに書き込むにはfopen("filename.txt,"wb")を使用できます。C - メモリにファイルを作成する

私はLinuxでfmemopen()を使用できることを知っています。 win32にも同様のソリューションがありますか?

+1

なぜですか?作成したファイルから読み込むには 'fread()'のような通常の 'FILE *' I/O関数を使うことができますか? – unwind

+1

あなたは何を解決しようとしていますか?あなたの最終目標は何ですか? – jweyrich

答えて

0

これはファイルを作成するので、私はfopenを使用しません。

メモリにファイルを作成するには、ファイルを作成し、それが適切な方法で保存する必要があります。

いくつかのデータ型の配列を作成する必要があります。私はchar *を使用しますが、imformationをエンコードしたいものは何でも使用できます。その後、配列に情報を追加することで、ファイルを読み書きすることができます。

+0

返事ありがとう、私の唯一の問題は、* FILEを使用する外部プログラムを使用するように言われたので、私はそれを使用することを余儀なくされました。 2番目の要求はディスクに何も書き込まないようにすることでした。メモリ内の仮想ファイル、メモリマッピングなどのいくつかの回避策を探しています。 –

+0

@J Nash:FILEポインタは完全に実装定義であり、コンパイラ間では移植できません。内部的に外部プログラム自体FILEがプログラムにどのような影響を与えるかはわかりません。 – Clifford

+0

申し訳ありませんが、徹底的に説明していないので、暗号化を既存のプログラムに追加しています。これはかなり複雑です。これは、ディスク上に存在する入力ファイルを読み込みます。現在、私はこれらのファイルをまず暗号化していますが、プログラム内で復号化しますが、安全ではない一時的な "オープンされた非暗号化"ファイルを作成します。ありがとう –

0

MapViewOfFileで近いものを実現できます。あなたはこのために使用すべき のWin32 APIは以下のとおりです。

CreateFile(...)

CreateFileMapping(...)

MapViewOfFile(...)

は、あなたが完了したら、ファイルマッピングをマップ解除し、クローズすることを忘れないでください。

+0

プレーンなCコンソールアプリケーションで利用できる関数はありますか? –

+0

Win32はプレーンなc APIです。あなたはWindows SDKがインストールされている必要がありますし、私はリンクされたMSDNのページに指定された正しいヘッダーファイルを含めることを確認してください – Indy9000

+0

'CreateFile'を必要としない仮想メモリにファイルをマップするには、' INVALID_HANDLE_VALUE' -1)を 'CreateFileMapping'に追加します。 – cdarke

0

このような機能は、Windowsでは本質的にサポートされていません。しかし、ファイルではなくメモリバッファにアクセスするために、またはstdioのような機能を実装するために、高水準stdio関数を書き直すことができます。または、RAM diskを実装することもできますが、RAMディスクドライバ自体をインストールすることは、「ディスクに書き込まない」ルールを満たしていない可能性があります。

関連する問題