2011-09-13 8 views
1

をファイルディスクリプタを取得し、私はこの記事を見ました:system call to map memory to a file descriptor (inverse mmap)?C++のmmapメモリにファイルし、そのメモリに

私はそれがそのインターフェイスでファイルディスクリプタが与えられることができるように望んでいる必要があり、ライブラリをしたいと思います私がmmapファイルを編集したメモリの領域から読み込むファイル記述子。そのメモリ領域

  • コールにファイルディスクリプタを取得

    1. mmapメモリ

    2. に大きなファイル(5ギガバイト)の内容:

      私はの効果に何かを必要としますそのファイル記述子をとり、何かを行うライブラリ

    mmapで使用したオリジナルのファイル記述子は、ディスク上のファイルを参照するため、当然動作しません。

    今まで私はfmemopenを呼び出しましたが、そのファンクションが呼び出されたときにはfilenoは呼び出されませんでした。すべてのポインタ?

    私はこれをやっている理由は、ファイルのデータを処理するので、ライブラリのコピー量を減らそうとしているからです。

  • +0

    あなたが求めていることはできません。あなたが与える理由は非常に一般的です。誰もができるだけ速く、効果的なプログラムを望んでいます。あなたがこれをやっている理由は、あなたが幸せになりたいということを伝えているようなものです。まさにこれを行うことで達成しようとしていることは何ですか?できるだけ早く大量のメモリ領域をファイルにダンプすることを目標にしていますか? – Omnifarious

    +0

    本質的に、プログラムは大きなファイルを読み込み、ファイルを処理しますが、このプロセスをできるだけ速くしたいのですが、速度を少し上げたramfsを使用しようとしましたが、今、私は何をしようとしていますramfsを使用して作成されたファイルシステムアクセスのオーバーヘッドをスキップするため、尋ねられました。 – Bill

    +0

    あなたの質問を編集して、あなたがもっとはっきりしていることをしようとしています。編集が役立ち、有用であることを願っています。 – Omnifarious

    答えて

    1

    ある意味では、あなたが求めていることは自明ではないようです。別の意味では不可能です。

    メモリのこの領域がすでにmmapになっているファイルを表している場合は、mmapへの呼び出しのファイル記述子が必要なので、すでにファイルディスクリプタがあります。 MAP_SHAREDモードでマップした場合は、ファイル記述子によるファイルの変更が自動的にメモリに表示され、メモリへの変更も自動的にファイルに表示されるはずです。それはモードのmmapの全体のポイントです。

    マニュアルページを見ると、メモリに保存したものがファイルに表示されるように、一部のシステムでmsyncに電話する必要があります。

    mallocなどの手段を使用して取得したメモリ領域があり、この領域にファイルディスクリプタを取得させたい場合は不可能です。

    +0

    答えをいただきありがとうございます。私はMmaped地域のみを読んでいますが、私は書いていません。 – Bill

    +0

    @Bill - 情報を書き出す必要がありますか?もしそうでなければ、最初に十分なファイルを 'mmap'していないのはなぜですか? – Omnifarious

    +0

    @Bill - ファイルから情報を取得する 'read'呼び出しを直接行う修正できないコードを呼び出す必要がありますか? – Omnifarious

    関連する問題