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

目录
相关文章
|
2月前
|
Linux Windows
Linux系统中的文件操作
Linux系统中的文件操作
|
2月前
|
Java Linux Shell
【Linux】13. 文件操作
【Linux】13. 文件操作
49 1
|
2天前
|
存储 数据挖掘 Linux
Linux命令split详解:大文件处理的得力助手
`split`命令是Linux用于将大文件分割成小文件的工具,常用于日志处理、备份。它支持按行数(-l)、字节数(-b)分割,并能自定义输出文件名(-a, -d)。例如,`split -b 10M largefile.txt smallfile_`会按10MB切割`largefile.txt`,生成`smallfile_`开头的文件。注意确保磁盘空间充足,避免文件名冲突,并备份原始文件。结合其他命令使用,能提高文件管理效率。
|
2月前
|
Linux
基于 Linux 的文件操作 网络编程的最后一环
Linux下万物皆文件 在了解了客户端和服务器的函数调用之后,我们只需要了解下文件操作就能编写出属于自己的客户端和服务器了,还能让他们进行通信。
30 0
|
2月前
|
存储 Linux C语言
Linux系统下C语言的文件操作
Linux系统下C语言的文件操作
33 0
|
10天前
|
Linux Shell Go
Linux中文件操作基本指令大全
Linux中文件操作基本指令大全
|
17天前
|
Linux 网络安全 开发工具
【linux】基础IO |文件操作符
【linux】基础IO |文件操作符
17 0
|
1月前
|
Linux Shell
解决:linux系统磁盘空间被占满,但是找不到大文件
解决:linux系统磁盘空间被占满,但是找不到大文件
25 0
|
2月前
|
Linux Shell
Linux操作系统下查找大文件或目录的技巧
Linux操作系统下查找大文件或目录的技巧
22 2
|
2月前
|
Linux C语言
【Linux】 拿下 系统 基础文件操作!!!
怎么样,我们的猜测没有问题!!!所以语言层的文件操作函数,本质底层是对系统调用的封装!通过不同标志位的封装来体现w r a+等不同打开类型! 我们在使用文件操作时,一般都要使用语言层的系统调用,来保证代码的可移植性。因为不同系统的系统调用可以会不一样!
26 2