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

请问怎样才能解决读写大文件时文件不丢失问题

    来源: 互联网  发布时间:2015-06-01

    本文导语:  在linux下总会出现读写大文件时,有数据丢失的问题,请问这是linux本身的bug, 还是有解决办法啊? 请高手指教 | 嘿,先生们,我们使用 off_t lseek(int fildes, off_t offset, int whence); int fseeko(F...

在linux下总会出现读写大文件时,有数据丢失的问题,请问这是linux本身的bug, 还是有解决办法啊?
请高手指教

|
嘿,先生们,我们使用
off_t lseek(int fildes, off_t offset, int whence);
int fseeko(FILE *stream, off_t offset, int whence);

给文件定位,off_t 通常就是32位的long int,这样支持的最大文件长度是2^31-1(2G-1),如果文件超过2G就没法处理了。

但如果我们定义:
 #define _FILE_OFFSET_BITS 64
那么,off_t就是64位的long int,支持4G文件大小绰绰有余。

这样只是解决了lseek的问题,读写文件是否还会出现其他问题,我没有试验过,不敢妄言。

|
fwrite不一定总是写入你希望写入的数据大小,只要它不返回-1就是操作正确,所以成功写入数据的范围是[0, 你要求的大小],所以一种安全的写操作应该是

int safe_write(FILE* pfile, void* buf,size_t size)
{
   int w_size = 0;
   int ret = 0;
//安全测试省略
   while (w_size  0)
      {
         w_size += ret;
      }
      else
      {
        break;
      }
   }
   return w_size;
}



|
lseek要的是文件描述符,不是FILE*。用fseeko64,注意不是fseek64。
新标准推荐fseeko/ftello,原来的fseek/ftell建议不再使用。

|
注意要用fflush()清缓冲区,如果有多进程调用同一文件,用flock()加锁

|
就是编写程序在系统的一个目录中读出一个很大的文件写到另外的目录中,比如4G,
====================================
4G啊,老大,文件大小超过2G,就不能使用通常的操作方法了。

    
 
 

您可能感兴趣的文章:

  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 菜问题:请问如何根据文件中的一段内容查找文件路径和文件名称,在线等候
  • 请问有将class文件转换为可执行文件(如Windows下的exe文件)的工具吗?
  • 请问,有什么办法可以把html文件生成pdf/excel格式的文件
  • 请问Qt的工程文件,如何转成VC的工程文件??
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • 请问哪里能找到Curses 的头文件和库文件?
  • 请问用GCC 编译,如何生成MAP文件?就是内存的分布映像文件?
  • 我装了一个cygwin,却说找不到cybiconv-2.dll这个文件。请问这个文件在哪?
  • 如何删除前面有个-的文件,我的根目录下有个文件叫 -C,请问如何删除?
  • 请问LINUX内核下,哪些文件夹下的文件是跟LINUX的硬件平台无关的?
  • 请问如何把.po文件转成.mo文件?
  • 请问bash中如何获取一个项目目录下的执行文件的文件名?
  • 请问用JBUILDER7怎么把一个.class文件转变为.exe 文件,请具体说明一下,谢谢了!
  • 请问unix下修改文件和文件夹读写权限的问题
  • 请问如何才能将大量文件合并成一个文件并去除所有空行?
  • 请问如何使客户端浏览器一定下载某个文件,而不是打开该文件(哪怕这个文件是HTML或JPG)?
  • 请问如何动态命名重定向输出文件名,并将内容输出到该文件?
  • 请问如何从完整的路径加文件名中得到这个文件名?
  • 请问JAVA如何读写注册表
  • 请问,FIFO的读写是否有字节数限制,PIPE_BUF如何使用?
  • 请问如何用shell来读写文本文件呢?
  • 请问:java语言能读写注册表吗?多谢多谢,
  • 请问下如何知道进程有没有从内存读写数据?
  • 请问多个线程同时读写同一文件的操作是否安全?
  • 请问在嵌入式linux应用中,串口操作需要包括什么,h文件,以及读写命令是什么?谢谢
  • 请问如何读写共享内存!(麻烦大侠们了)
  • 请问linux中文件读写放在进程中和线程中性能为什么差别大。修改线程优先级也不行.
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问一下那个不丢失数据,可以给硬盘分区的软件是什么?
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问在丢失所有密码而且本机控制台被锁的情况下更改root密码以是系统可用?
  • linux系统分区表丢失了,请问怎么恢复分区表。
  • 请问什么方法可以使我记录的数据在突然掉电的情况下,也不会丢失???????
  • 请问一个关于Linux的Input子系统的丢失发送数据的问题
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • java开源软件 iis7站长之家
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待
  • 请问如何在一台单机上装VMware的网络访问问题?
  • (急)请问大侠,JDK怎么配置?
  • 请问机器升级后,编译为何出错?


  • 站内导航:


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

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

    浙ICP备11055608号-3