牛骨文教育服务平台(让学习变的简单)
博文笔记

linux c之mmap使用

创建时间:2013-10-30 投稿人: 浏览次数:4915
/* 
 * File:   main.c
 * Author: root
 *
 * Created on 2013年10月30日, 下午10:24
 */

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>

/*
 * 
 */
int main(int argc, char** argv) {

    //获取程序目录
    char dirPath[128];
    getcwd(dirPath,128);
    printf("%s
",dirPath);
    //获取程序路径
    char pathbuf[128];
    readlink("/proc/self/exe",pathbuf,128);
    printf("%s
",pathbuf);
    
    int fd;
    char* buf;
    int i;
    //取得文件状态)相关函数 fstat,lstat,chmod,chown,readlink,utime
    struct stat statbuf;
    if(stat("test.txt",&statbuf)==-1)
    {
        //文件不存在
        perror("fail to get stat");
        exit(1);
    }
    fd=open("test.txt",O_RDONLY);
    if(fd==-1)
    {
        perror("fail to open");
        exit(1);
    }
    //建立内存映射,)用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。
    buf=(char*)mmap(NULL,statbuf.st_size,PROT_READ,MAP_PRIVATE,fd,0);
    if(buf==MAP_FAILED)
    {
        perror("fail to mmap");
        exit(1);
    }
    i=0;
    while(i<statbuf.st_size)
    {
        printf("%c",buf[i]);
        i++;
    }
    printf("
");
    //解除内存映射
    if(munmap(buf,statbuf.st_size)==-1)
    {
        perror("fail to munmap");
        exit(1);
    }
    close(fd);
    printf("end!
");
    return (EXIT_SUCCESS);
}


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。