标签:
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