Linux C 下的大文件操作

这里说的大文件指大小超过4G的文件。

在32位环境下,linux默认打开、读、写超过4G的文件会返回错误。定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效。

注意它必须定义在所有头文件之前。

#ifndef _FILE_OFFSET_BITS

#define _FILE_OFFSET_BITS 64

#endif

 

或者在编译时添加如下参数:

-D_FILE_OFFSET_BITS=64-D_LARGEFILE_SOURCE 

或者使用函数fopen64,但是该函数我的测试机上没有找到相关的说明,所以在我这里不可用。

 

_FILE_OFFSET_BITS的定义简单来说就是在32位机器上,使用64位的变量空间,长度增加了一倍。新的int就相当于原来的long int,这样就可以控制大于4G的文件了。

 

在大文件打开后,即可使用文件操作函数为所欲为了。 

比较高级的用法:

Mmap方式,即内存映射的方法,简单说就是将文件分成片段,然后逐片的读到内存中并操作。

优点是性能很好,处理大文件的速度很快。

缺点是需要进程锁来锁住进程,并且需要保留每次操作的位置,用来下一次的操作。实现起来比较复杂,感兴趣的同学可以参考:

http://www.libing.net.cn/read.php/1252.htm

http://hi.baidu.com/vcprogrammer/blog/item/da863f4ff5533137aec3abec.html

时间: 2024-09-20 16:51:55

Linux C 下的大文件操作的相关文章

linux系统下分割大文件的方法

  在linux中分割大文件,比如一个5gb日志文件,需要把它分成多个小文件,分割后以利于普通的文本编辑器读取. 有时,需要传输20gb的大文件到另一台服务器,也需要把它分割成多个文件,这样便于传输数据. 以下通过五个不同的例子,来讲解Linux下分割大文件的方法,供大家参考. 例1.以每个文件1000行分割 split命令分割文件成每个文件1000行,并且文件名依次为 [前缀]aa, [前缀]ab, [前缀]ac等,默认的前缀是X,每个文件的行数为1000行. 命令: 代码如下: $ spli

大文件 b树 存储-大文件操作利用B树实现的具体原理

问题描述 大文件操作利用B树实现的具体原理 我们做一个图书馆管理系统,要求是书的信息存储在一个文件中,这个文件需要满足2G的大小,也就是说一个文件中可以同时放下几百万本书籍的信息,通过网上查资料,很多是说用B树来实现,可是我想不明白的是建立B树的索引时索引的指针指向的记录地址怎么确定,也就是说在一个文件里我要查找一本书的信息,需要分批读进内存来进行查找,如果使用了B树,怎么实现查找呢,它是直接可以根据索引找到该书在文件中的位置吗? 解决方案 在设计应用软件的时候直接设计数据存储的物理结构,这种做

linux基础-求助大牛,linux系统下动态链接文件出错???

问题描述 求助大牛,linux系统下动态链接文件出错??? 有个linux下的应用程序,在centos5.8下正常运行,但是放到centos6.3-64bit 的就出现错误,错误代码是:error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory 大牛们我该如何查找错误点?怎么解决这个问题..非常感谢!!!我的QQ:1602710388.

Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作 read系统调用测试 /************************************************************************* > File Name: read.c > Author: > Mail: > Created Time: Tue 10 Feb 2015 01:23:58 AM PST **********************************

查找Linux系统中的大文件和大目录方法

  查找大文件 eg:查找当前目录下大于10MB的文件 代码如下: $ find . -type f -size +10000k -exec ls -lh {} ; | awk '{ print $8 ": " $5 }' Sample output: ./.kde/share/apps/akregator/Archive/http___blogs.msdn.com_MainFeed.aspx?Type=AllBlogs.mk4: 91M ./out/out.tar.gz: 828M

详解Linux系统下的hosts文件

  hosts文件 hosts -- the static table lookup for host name(主机名查询静态表). hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以ascii格式保存在/etc/目录下.hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名.在没有域名解析服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址,否则就需要使用dns服务程序来解决.通过可以将常用的域名和ip地址映射加入到hosts文

如何避免在Win7系统下复制大文件出现崩溃现象

有的用户在win7电脑系统复制大文件的时候,遇到系统崩溃的情况,具体表现为电脑死机或者直接卡住,无法进行操作.让用户很担心传输文件的安全,特别是一些重要的文件资料,那么有什么办法可以解决这种系统崩溃的问题呢? 1.首先大家必须做的就是当我们传输复制文件的时候做一些工作尽量减少系统崩盘的可能,大家先关闭文件的缩略图功能,紧接着我们打开系统文件夹然后就可以看到左上角有一个"组织"-"文件夹和搜索选项"-"查看"-"始终显示图标,从不显示缩略

vss源代码管理下的FSO文件操作权限

问题描述 受VSS源代码管理,FSO文件操作就没权限了,怎么回事啊,必须要签出该文件才可以,未签出情况下就报错没权限 解决方案 解决方案二:签出?什么意思checkout?没有checkout时候,文件是只读的

Win7下局域网大文件或多文件经常出现复制中断的解决方法

  你们在传送文件都是选择哪个方式?QQ互传.U盘拷贝还是其他什么方式,这两种方式虽然最为常见,但是也有弊端,利用QQ互传的话,第一传送的速度无法保证,一般较慢;第二就是两个电脑必须都登入QQ才能实现互传,但是如果只有一个账号就难以实现了.U盘传送相对较为繁琐,要拷贝复制.现在我们可以采用局域网传送,同时避免了上诉的两个问题.万一在传送大文件时出现中断肿么办呢?下面小编来为大家解答! 出现复制大文件时才出现中断的情况,大多是由于网络不稳定引起的,当然原因有多方面. 1.目标计算机网卡不稳定或网线