Unix-system-calls-mremap
[top]#
[[File:]]
[[File:]] |
|Web |This Site
- 初心者向けのUnix *
- Unix-ホーム
- Unix-はじめに
- Unix-ファイル管理
- Unix-ディレクトリ
- Unix-ファイル権限
- Unix-環境
- Unix-基本ユーティリティ
- Unix-パイプとフィルタ
- Unix-プロセス
- Unix-コミュニケーション
- Unix-The Vi Editor
- Unix Shellプログラミング*
- Unix-シェルとは?
- Unix-変数の使用
- Unix-特殊変数
- Unix-配列の使用
- Unix-基本的な演算子
- Unix-意思決定
- Unix-シェルループ
- Unix-ループ制御
- Unix-シェル置換
- Unix-引用メカニズム
- Unix-IOリダイレクト
- UNIX-シェル関数
- Unix-マンページヘルプ
- 高度なUnix *
- Unix-正規表現
- Unix-ファイルシステムの基本
- Unix-ユーザー管理
- Unix-システムパフォーマンス
- Unix-システムログ
- Unix-信号とトラップ
- Unixの便利なリファレンス*
- Unix-便利なコマンド
- Unix-クイックガイド
- Unix-組み込み関数
- Unix-システムコール
- Unix-コマンドリスト
- Unixの役立つリソース*
- Unix役立つリソース
選択した読書
Copyright©2014 by finddevguides
Home | References | Discussion Forums | About TP |
mremap()-Unix、Linuxシステムコール
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]
広告
NAME
mremap-仮想メモリアドレスの再マッピング
概要
- #define _GNU_SOURCE * *#include <unistd.h> * *#include <sys/mman.h> *
- void mremap(void '''old_address 、size_t old_size 、size_t new_size 、int * *flags *);
説明
_old_address_は、拡張(または縮小)する仮想メモリブロックの古いアドレスです。 _old_address_はページに揃える必要があることに注意してください。 _old_size_は、仮想メモリブロックの古いサイズです。 _new_size_は、サイズ変更後の仮想メモリブロックの要求サイズです。
Linuxでは、メモリはページに分割されます。 ユーザープロセスには、1つまたは複数の線形仮想メモリセグメントがあります。 各仮想メモリセグメントには、(ページテーブル内の)実メモリページへの1つ以上のマッピングがあります。 各仮想メモリセグメントには独自の保護(アクセス権)があり、メモリが誤ってアクセスされた場合(読み取り専用セグメントへの書き込みなど)、セグメンテーション違反を引き起こす可能性があります。 セグメント外の仮想メモリにアクセスすると、セグメンテーション違反も発生します。
_flags_ビットマスク引数は0か、次のフラグを含めることができます。
Tag
説明
デフォルトでは、現在の場所でマッピングを展開するのに十分なスペースがない場合、 mremap ()は失敗します。 このフラグを指定すると、カーネルは必要に応じてマッピングを新しい仮想アドレスに再配置できます。 マッピングが再配置された場合、古いマッピング位置への絶対ポインターは無効になります(マッピングの開始アドレスに対するオフセットを使用する必要があります)。
このフラグは、 mmap (2)の MAP_FIXED フラグと同様の目的を果たします。 このフラグが指定されている場合、 mremap ()は5番目の引数_void new_address_を受け入れます。これは、マッピングの移動先となるページ境界整列アドレスを指定します。 _new_address_および_new_size_で指定されたアドレス範囲での以前のマッピングはマッピングされません。 MREMAP_FIXED が指定されている場合、 *MREMAP_MAYMOVE も指定する必要があります。
_old_address_および_old_size_で指定されたメモリセグメントがロックされている場合( mlock ()または同様の方法を使用)、セグメントのサイズ変更や再配置時にこのロックが維持されます。 結果として、プロセスによってロックされたメモリの量が変わる場合があります。
返り値
成功すると mremap ()は新しい仮想メモリ領域へのポインタを返します。 エラー時には、値 MAP_FAILED (つまり、(void *)-1)が返され、_errno_が適切に設定されます。
エラー
Tag | Description |
---|---|
EAGAIN | The caller tried to expand a memory segment that is locked, but this was not possible without exceeding the RLIMIT_MEMLOCK resource limit. |
EFAULT | "Segmentation fault." Some address in the range old_address to old_address+old_size is an invalid virtual memory address for this process. You can also get EFAULT even if there exist mappings that cover the whole address space requested, but those mappings are of different types. |
*EINVAL * | An invalid argument was given. Possible causes are: old_address was not page aligned; a value other than* MREMAP_MAYMOVE or MREMAP_FIXED was specified in flags; new_size was zero; new_size or new_address was invalid; or the new address range specified by new_address and new_size overlapped the old address range specified by old_address and old_size; or MREMAP_FIXED was specified without also specifying MREMAP_MAYMOVE*. |
*ENOMEM * | The memory area cannot be expanded at the current virtual address, and the* MREMAP_MAYMOVE* flag is not set in flags. Or, there is not enough (virtual) memory available. |
ノート
バージョン2.4より前では、glibcは MREMAP_FIXED の定義を公開せず、 mremap ()のプロトタイプは_new_address_引数を許可していませんでした。
準拠
この呼び出しはLinux固有であり、移植性を目的としたプログラムでは使用しないでください。 4.2BSDには(実際には実装されていない) mremap (2)呼び出しがあり、セマンティクスがまったく異なります。
関連項目
ページメモリの詳細については、お気に入りのOSテキストブックを参照してください。 (Andrew S.による現代オペレーティングシステム Tannenbaum、Inside Linux by Randolf Bentson、The Design of the UNIX Operating System by Maurice J. バッハ)http://www.finddevguides.com/unix_system_calls/index[previous] http://www.finddevguides.com/unix_system_calls/index [next] image:http ://www.finddevguides.com/print.gif [Printer Friendly]
広告
Advertisements |