oracular (2) msync.2.gz

Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       msync - ファイルをマップしたメモリーと同期させる

書式

       #include <sys/mman.h>

       int msync(void *addr, size_t length, int flags);

説明

       msync()  は mmap(2)  を使ってメモリーにマップされたファイルの、 メモリー上のコピーになされ
       た変更をファイルシステムに反映させる。 この関数を使用しないと、 munmap(2) が呼び出されるま
       で変更が書き戻される保証はない。  より正確には、ファイルのうち  addr から始まり長さ length
       のメモリー領域に対応する部分が更新される。

       The  flags  argument  should  specify  exactly  one  of  MS_ASYNC  and  MS_SYNC,  and  may
       additionally include the MS_INVALIDATE bit.  These bits have the following meanings:

       MS_ASYNC
              Specifies that an update be scheduled, but the call returns immediately.

       MS_SYNC
              Requests an update and waits for it to complete.

       MS_INVALIDATE
              Asks  to  invalidate  other  mappings of the same file (so that they can be updated
              with the fresh values just written).

返り値

       成功した場合、 0 が返る。エラーの場合、 -1 が返り、 errno が適切に設定される。

エラー

       EBUSY  I flags に MS_INVALIDATE が指定されたが、指定されたアドレス範囲にロックが存在する。

       EINVAL addr が PAGESIZE の倍数でない。または、 flagsMS_ASYNCMS_INVALIDATEMS_SYNC
              以外のビットが設定された。  または、  flagsMS_SYNCMS_ASYNC の両方が設定され
              た。

       ENOMEM 指定されたメモリー (またはその一部) がマップされていない。

準拠

       POSIX.1-2001, POSIX.1-2008.

       この関数は Linux 1.3.21 で導入されたが、 ENOMEM ではなく  EFAULT  が使われていた。  これは
       Linux 2.4.19 で POSIX における値 ENOMEM に変更された。

       msync()   が使用可能な POSIX システムでは _POSIX_MAPPED_FILES_POSIX_SYNCHRONIZED_IO の
       両方が <unistd.h> で 0 より大きい値に定義される。 (sysconf(3)  を参照すること。 )

注意

       POSIX では MS_SYNCMS_ASYNC のいずれかは必ず  flags  に指定しなければならないとされてお
       り、 実際にこれらのフラグのいずれかを指定しなかった場合 msync() が失敗するシステムもある。
       しかし、 Linux ではこれらのフラグのいずれも指定せずに msync() を呼び出すことができ、  その
       場合の動作は  (現在のところ)  MS_ASYNC を指定した場合と等価である。 (Linux 2.6.19 以降では
       MS_ASYNC は実際には no-op (何もしない命令) である。 これはカーネルが正しく dirty  ページを
       追跡し、必要に応じてストレージにそれらをフラッシュするからである。)  Linux  の動作に関係な
       く、アプリケーションの移植性を考慮し、将来も確実に動くようにするには、 MS_SYNCMS_ASYNC
       のいずれかを必ず flags に指定するようにすべきである。

関連項目

       mmap(2)

       B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128–129 and 389–391.

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。