标签:
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);返回值:成功返回0,失败返回-1,错误原因存于 errno 中。
示例代码:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include <errno.h>
#define FILE_NAME "test_file"
//异常检查函数,打印出错的信息
void print_error(int f_line){
fprintf(stderr,"%s %s %d\n",strerror(errno),__FILE__,f_line);
}
int main(int argc, char** argv){
int fd;
void *map_ptr;
struct stat m_stat;
//获取文件的状态
if(stat(FILE_NAME,&m_stat) == -1){
print_error(__LINE__);
return -1;
}
if((fd = open(FILE_NAME,O_RDWR)) == -1){
print_error(__LINE__);
return -1;
}
//映射了整个文件, m_stat.st_size 中放的是整个文件的大小
if((map_ptr = mmap(NULL,m_stat.st_size,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0)) == (void *)MAP_FAILED){
print_error(__LINE__);
return -1;
}
//打印文件的内容
printf("%s",(char *)map_ptr);
//修改映射区域的内容,由于使用了 PROT_WRITE ,程序结束后,会将内容写入原文件中
memcpy(map_ptr,"hello",5);
//断开内存映射
munmap(map_ptr,m_stat.st_size);
close(fd);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u011641885/article/details/47455451