2016-04-12 4 views
1

C言語でmmapを使用して明示的に開いていないメモリマップファイルを閉じるにはどうすればよいですか?私はlsofを使ってメモリマップされたファイルの名前を見ることができます。そして、私はmunmapを呼び出すことができるように、何とかファイルのアドレスとサイズを取得できるようにしたいと思います。私は/ proc/self/mem /を介してメモリ情報にアクセスできるはずですが、そこから進歩する方法やこれが正しいかどうかは完全にはわかりません。ありがとう。私は明示的に開いていないCのメモリマップされたファイルを閉じるには?

EDIT

私は、デバイス・ファイルへの書き込みライブラリを使用しています。私がしようとしているのは、このデバイスを一時的に物理的に利用できなくなり、プログラムがこれから回復することをシミュレートすることです。デバイスの一部が再利用可能になるのはドライバが再初期化されているためです。モジュールカウントがゼロにならず、カーネルがアンロードを許可しないため、私のプロセスでも参照を維持できません。私はすべてのファイル記述子を識別してこれを閉じることができましたが、lsofはまだそのデバイスを参照している共有メモリの場所を指しています。私はこれを明示的にオープンしていなかったので、そうしたコードは私にはアクセスできませんでした。私はまだそれを閉じることができる方法を望んでいました。

+4

なぜそれをしたいですか? – fuz

+0

@FUZxxl編集を参照してください。 – John

答えて

3

既知の状態に戻るためにexec()システムコールを使用することをお勧めします。

あなたが求めているのは、いくつかのライブラリ関数からメモリマッピングをヤンクする方法です。これはおそらくヒープマネージャーに関係しています。あなたはそれをデバッグしたくありません。

OP = Heisenbug。まあ、それは特異なフィッティングです。

編集後に表示される質問については、ここでXY問題があります。デバイスの障害で何が起きるかは、メモリマッピングを解放することではなく、領域へのすべてのアクセスでSIGBUSが生成されるように変更する可能性が高くなります.SIGBUSはシミュレーションするのがはるかに困難です。

関連する問題