システムmmap
コールにはパラメータとしてfdが必要ですが、fdを閉じると、mmapはまだプロセスのメモリアドレス空間に存在します。
したがって、mmapを維持するために開いたfdは必要ありません。それでは、Linuxはなぜfdを使用してファイルを生成するmmapだけをサポートし、ファイル名パスはサポートしないのですか? andのようなシステムコールを行うことができれば本当に良いではないでしょうかmmapat
?openat
execveat
mmap
ファイルへの追加参照が生成されると、mmapat
プロセスのfdを取得せずに最初にその参照を自動的に生成してから後で解放できないのはなぜですか?
Linuxカーネルでそのようなシステムコールをしないという歴史的またはセキュリティ上の理由はありますか?
ベストアンサー1
mmap(2)は、デフォルトではカーネルバッファを読み込み、提供されたバッファにコピーするのではなく、カーネルが直接書き込むバッファへの読み込み(2)です。
readat(2) がないのと同じ理由で mmapat(2) もありません。
ファイル記述子はもう必要ありません。
mmap() 関数は、ファイル記述子 fildes に関連付けられたファイルに追加の参照を追加します。これは、対応するファイル記述子の後続のclose()によって削除されません。ファイルへのマッピングがもう存在しない場合、参照は削除されます。
これはオープングループホームページ。 私の記憶が正しいなら、彼らはPOSIX標準を管理している人なので、知っておく必要があります。