程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> msync()與munmap()

msync()與munmap()

編輯:關於C語言

刷新變化函數

msync()

進程在映射空間的對共享內容的改變並不直接寫回到磁盤文件中,往往在調用munmap()後才執行該操作。可以通過調用msync()函數來實現磁盤文件內容與共享內存一致,即同步操作。

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

頭文件

#include <sys/mman.h>

addr:文件映射到進程空間的地址;

len:映射空間的大小;

flags:刷新的參數設置,可以取值MS_ASYNC/ MS_SYNC/ MS_INVALIDATE

其中:

取值為MS_ASYNC異步)時,調用會立即返回,不等到更新的完成;

取值為MS_SYNC同步)時,調用會等到更新完成之後返回;

取MS_INVALIDATE通知使用該共享區域的進程,數據已經改變)時,在共享內容更改之後,使得文件的其他映射失效,從而使得共享該文件的其他進程去重新獲取最新值;

返回值

成功則返回0;失敗則返回-1;

可能的錯誤

EBUSY/ EINVAL/ ENOMEM

解除內存映射



munmap

表頭文件

#include<unistd.h>

#include <sys/mman.h>

定義函數 int munmap(void *start,size_t length);

     函數說明 munmap()用來取消參數start所指的映射內存起始地址,參數length則是欲取消的內存大小。當進程結束或利用exec相關函數來執行其他程序時,映射內存會自動解除,但關閉對應的文件描述詞時不會解除映射。

     返回值 如果解除映射成功則返回0,否則返回-1,錯誤原因存於errno中錯誤代碼EINVAL

      參數 start或length 不合法。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved