TEDIA会員に登録したメールアドレスとパスワードを入力してください

メールアドレス:

     パスワード:


パスワードを忘れた方はパスワードの確認を行ってください。

TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます


>> テクノロジーポータル TEDIA トップページへ戻る <<

Think IT Software Developer's Think IT Find-IT 失敗しないソフト選び Find-IT TEDIA テクノロジーポータル TEDIA インストールマニアックス2008 インストールマニアックス2008

TEDIA SponsorsOpen Source Web Development Tutorials - Dev Shed

LinuxのMMAPシステムコール
(2009/03/17公開)

相関信号

 マッピングされる領域には、以下の2つの信号が相関しています。

SIGBUS
 この信号は、すでに無効となったマッピング領域へアクセスが試みられたときに生成されます。例えば、ファイルがマッピングされた後に切り詰められた場合です。

SIGSEGV
 この信号は、読み出し専用としてマッピングされた領域へ書き込みが試みられたときに生成されます。

munmap()
 Linuxには、mmap()で作成したマッピングを削除するためのシステムコールとして、munmap()があります。


  #include <sys/mman.h> 
  int munmap (void *addr, size_t len); 



 munmap()のコールは、任意のプロセスのアドレス空間に存在するページを含む任意のマッピングを削除します。このマッピングはaddr から始まり、ページ境界に合って、lenバイトの長さにわたって継続しています。マッピングが削除されたら、前に関連付いていたメモリは無効となり、その後アクセスを試みるとSIGSEGV信号が生成されます。

 通常、munmap()には、前回に呼び出したmmap()からの戻り値とlenパラメータが渡されます。

 成功すると、munmap()はゼロを戻します。失敗すると-1を戻し、適切なerrnoを示します。標準のerrno 値はEINVALしかありません。EINVALは、1つあるいは複数のパラメータが無効であったことを意味します。

 一例を挙げましょう。以下のスニペットは、 [addr,addr+len]区間に存在するページを含むすべてのメモリ領域のマッピング削除(アンマッピング)を実行します。


  if (munmap (addr, len) == -1)
          perror ("munmap"); 



 解説は、次のパートに続きます。

(編集部より:次回は、2009年3月18日に公開予定です)

(著者: O'Reilly Media)

原文へのリンク


前のページ     1    2    3    4   

Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.