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

一道笔试题:用open/close/read/write完成大文件读写。

    来源: 互联网  发布时间:2016-08-05

    本文导语:  用open/close/read/write完成大文件读写。 实现一个写文件的函数:  // 往filename文件,距离文件头偏移量为offset的位置,写入buf缓冲区中len个字节 int InsertFile( char *filename, off_t offset, void *buf, int len ) {     ...... } ...

用open/close/read/write完成大文件读写。
实现一个写文件的函数: 
// 往filename文件,距离文件头偏移量为offset的位置,写入buf缓冲区中len个字节
int InsertFile( char *filename, off_t offset, void *buf, int len )
{
    ......
}

要支持大文件(>4GB)。
答题时可以上网。


我开始没看清题,用mmap写的,结果写出来感觉比较复杂,也明显不符合题意。


这个函数挺实用的,所以在此求解,谢谢!

|
设置_FILE_OFFSET_BITS=64
用lseek来偏移文件指针
再不清楚就google

|


如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的 0 表示。空洞是否占用硬盘空间是由文件系统(file system)决定的。

|
恩,读写小文件,可以采用一次全部读取,然后一次全部写入的方式。
如果读写大文件,就得采用偏移,定位到目标位置进行读取写入。

|
刚试了一下,offset_t有大小限制!!!晕倒,最后居然溢出了。。。这可能是总是所在吧
寻找解决方法ing

|
http://bbs.chinaunix.net/thread-1612117-1-1.html

这个帖子说的很清楚,在编译时加上选项,就可以直接用lseek偏移超过4G了。

|
open 的时候要加O_LARGEFILE(可以man下看看) 选项,不加文件写大了直接退出,或者有些报BUS ERROR

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












  • 相关文章推荐
  • 一道送分的问题
  • 一道考验基础的JAVA语法题
  • WEB前端 iis7站长之家
  • 关于构造函数的一道题
  • 初中计算机老师给我们出过一道题,那时候印象很深
  • 一道基础英语填空题(Java)
  • 问一道SCJP的题目
  • SCJP 模拟题一道
  • scjp考题一道
  • scjp考题一道!!!!!!!!
  • 一道SCJP的题
  • 一道SCJP题有请各大虾指教.
  • 一道题,select what & why?
  • 一道关于操作系统的题
  • 问一道算法题
  • 一道习题
  • 一道小程序有问题?请教!
  • 一道scjp的题目
  • 一道scjp模拟题,请赐教。
  • 关于操作系统的一道题目(关于临时文件)


  • 站内导航:


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

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

    浙ICP备11055608号-3