Linux 内存映射函数 mmap()函数详解
返回说明 成功执行时,mmap()返回被映射区的指针,munmap()返回0。失败时,mmap()返回MAP_FAILED[其值为(void *)-1],munmap返回-1。errno被设为以下的某个值 EACCES:访问出错 EAGAIN:文件已被锁定,或者太多的内存已被锁定 EBADF:fd不是有效的文件描述词 EINVAL:一个或者多个参数无效 ENFILE:已达到系统对打开文件的限制 ENODEV:指定文件所在的文件系统不支持内存映射 ENOMEM:内存不足,或者进程已超出最大内存映射数量 EPERM:权能不足,操作不允许 ETXTBSY:已写的方式打开文件,同时指定MAP_DENYWRITE标志 SIGSEGV:试着向只读区写入 SIGBUS:试着访问不属于进程的内存区 int munmap(void *start, size_t length) start:要取消映射的内存区域的起始地址 length:要取消映射的内存区域的大小。 返回说明 成功执行时munmap()返回0。失败时munmap返回-1. int msync(const void *start, size_t length, int flags); 对映射内存的内容的更改并不会立即更新到文件中,而是有一段时间的延迟,你可以调用msync()来显式同步一下, 这样你内存的更新就能立即保存到文件里 start:要进行同步的映射的内存区域的起始地址。 length:要同步的内存区域的大小 flag:flags可以为以下三个值之一: MS_ASYNC : 请Kernel快将资料写入。 MS_SYNC : 在msync结束返回前,将资料写入。 MS_INVALIDATE : 让核心自行决定是否写入,仅在特殊状况下使用 三、用户空间和驱动程序的内存映射 3.1、基本过程 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |