当前位置:  技术问答>linux和unix

mmap 内存映射文件读取的问题

    来源: 互联网  发布时间:2017-02-24

    本文导语:  我采用了一个循环读取800多K的文件。 mmap映射的缓存大小是4096字节, 映射后调用write将缓存文件内容写入sockfd缓存。 请问一下,最后一个内存页面不是4K整数倍的时候, 映射的缓存大小还是固定4096吗? 我用write写...

我采用了一个循环读取800多K的文件。
mmap映射的缓存大小是4096字节,
映射后调用write将缓存文件内容写入sockfd缓存。

请问一下,最后一个内存页面不是4K整数倍的时候,
映射的缓存大小还是固定4096吗?
我用write写文件,理论上最后一次循环应该是是写1993字节呀,
怎么最后还是写的4096字节? 求教。。

部门代码如下:

               for(position=1,j=1;j= len ){
                        printf("write error");
                        exit(EXIT_FAILURE);
                    }
  
                    printf("%d : file_block_length:%dn",position,len);

                    munmap(mapped,len);
                    position+=2;
                    lseek(fd,4096L,SEEK_CUR);
                }

                lseek(fd,4096L,SEEK_SET);

  for(position=2,j=1;j= len ){
                        printf("write error");
                        exit(EXIT_FAILURE);
                    }
                    printf("%d : file_block_length:%dn",position,len);

                    munmap(mapped,len);

                    position+=2;
                    lseek(fd,4096L,SEEK_CUR);
                }

大概意思是:先传奇数块文件,再传偶数块文件。

|
懒得看代码, 自己读完自己改.


       The off argument is constrained to be aligned and sized according to the value returned by sysconf() when passed  _SC_PAGESIZE  or  _SC_PAGE_SIZE.  When
       MAP_FIXED is specified, the application shall ensure that the argument addr also meets these constraints. The implementation performs mapping operations
       over whole pages. Thus, while the argument len need not meet a size or alignment constraint, the implementation shall include, in any mapping operation,
       any partial page specified by the range [pa,pa+len).

       The  system shall always zero-fill any partial page at the end of an object. Further, the system shall never write out any modified portions of the last
       page of an object which are beyond its end.  References within the address range starting at pa and continuing for len bytes to  whole  pages  following
       the end of an object shall result in delivery of a SIGBUS signal.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mmap()在内存小时的性能
  • 请问如何查看一个进程中 brk和mmap各自分配的内存空间的大小
  • mmap共享内存问题?
  • 因为mmap函数返回值是void*类型,是否可以将其强制转换成char*类型,按字符串操作,然后将修改重新写入内存映像即可????
  • linux下利用mmap实现共享内存,出现总线错误
  • 请高手相助: mmap 使用问题,程序执行完后吃掉 100M 内存 !
  • 请给出使用mmap实现进程间共享内存的程序代码
  • 关于mmap的问题
  • 问个mmap和其锁的问题
  • mmap机制的问题
  • 客户端 mmap 写文件,麻烦给点代码参考下,谢谢
  • Linux下mmap函数的问题
  • mmap和malloc的区别是什么?
  • mmap使用中的困惑,,,在线等待,,请帮忙,谢谢!
  • 如何写mmap程序
  • 嵌入式LINUX mmap 出错
  • 请问溢出mmap()分配的共享空间要怎么办??
  • 关于2.4.2的mmap()
  • 请问LDD3中的 simple_nopage_mmap 函数的一些问题
  • mmap问题!
  • 请问:FIFO文件能用mmap来使用吗?
  • 使用mmap可以读写文件,这是怎么实现的?
  • 请教用过mmap的大虾
  • 高分求助:bigphysareas和mmap的操作在两个不同的版本返回的结果不同
  • 有关mmap()的一个问题
  • ***对FRAMEBUFFER中用到的MMAP的严重质疑****
  • mmap出错,不知是什么原因.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3