使用mmap求助

发布于 2022-07-23 03:59:26 字数 2966 浏览 12 评论 1

mmap使用时报错,invalid argument, 如果把MAP_SHARED 换成 MAP_PRIVATE就可以了,这是为什么?
/* Created by Anjuta version 1.2.4a */
/*        This file will not be overwritten */

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

int main()
{
        int fdes;
        void* mapaddr = NULL;
        struct stat stat;
        size_t length = 0;
        int pagesize  = 0;
        int remaining = 0;
        fdes = open("./main.c", O_RDWR, 0);
        if(fdes < 0){
                perror("open file errorn");
                return -1;
        }
        if(fstat(fdes, &stat) < 0){
                perror("fstat errorn");
                return -1;
        }
       
        length = stat.st_size;
       
        pagesize = getpagesize();
        remaining = length % pagesize;
        if(remaining != 0)
        {
                length = length + pagesize - remaining;       
        }
         
        mapaddr = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_PRIVATE, fdes, 0);
        if(mapaddr == (void*)(-1)){
                if(errno == EINVAL)
                        fprintf(stderr, "invalid argumentsn");
                perror("mmap error");
                return -1;               
        }

       
        if(write(1, mapaddr, stat.st_size) < 0)
        {
                perror("write error ");
        }
       
       
        return (0);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文