32位linux系统操作大于2G文件方法

摘要:
我们尝试使用stat读取4.2G文件以查看文件的大小。运行时报告错误“权限被拒绝”。综上所述,如果要获得大于2G的文件大小,则需要在编译时添加编译选项。上述两种方法都通过了测试,读写大于4G的文件没有问题。我认为操作大型文件最可靠的方法是添加编译器宏,这与以前一样可靠。

一、获取文件大小

1、使用stat函数获取文件大小

先看看struct结构吧,其中文件大小定义如下:

#ifndef __USE_FILE_OFFSET64
    __off_t st_size;   /* Size of file, in bytes.  */
#else
    __off64_t st_size;   /* Size of file, in bytes.  */
#endif

一般我们使用的都是__off_t,也就是long int(4个字节,-2147438648~+2141438647),而__off64_t则是long long int(8个字节,-9223372036854775808~+9223372036854775807)。

我们尝试使用stat去读一个4.2G的文件,看读到的文件大小为多少。运行竟然报错,“Permission denied”,许可拒绝。

看样直接读是不行的,我们在编译的时候加入-D_FILE_OFFSET_BITS=64选项,再次尝试,此次我们文件大小正常获取了。

综上所述,如果要获取一个大于2G的文件的大小,则需要在编译的时候加入编译选项。

2、使用awk脚本获取

char buff[16];
FILE *fp = popen("ls -l /mnt/hgfs/share/worspace/CIS7.5/src/test/big|awk '{print $5}'", "r");
fgets(buff, sizeof(buff), fp);

此方法需要awk脚本的支持,并不推荐使用。

二、读写文件

正常情况下大于2G的文件在读写的时候到了2G就会自动退出,报“文件大小超出限制”的错误。

此时有两种办法来解决

1、加入编译选项

-D_FILE_OFFSET_BITS=64

2、在open的第二个参数加入O_LARGEFILE位。

以上两种方法都测试通过,读写大于4G的文件没有任何问题。

对于要操作大文件,个人觉得最靠谱的就是加入编译宏,这个靠谱,其它跟以前一样照旧。

免责声明:文章转载自《32位linux系统操作大于2G文件方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇taro教程将Delphi的对象方法设为回调函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux的用户和组

基本概念 Linux的用户和组的作用主要有两点: 登录操作系统使用资源。 以某个用户和组的身份运行服务。 用户和组的概念的理解,需要与Linux的文件权限共同来理解。例如 某个内存中的进程对于某个系统资源是否有权限,要根据运行该进程的用户和组对于该资源是否有权限来决定。 用户创建了某个文件后,该文件的所有者与所有组的归属取决于创建文件的用户和组。 某...

linux ps命令详解

ps命令(全称:process status)是linux查看当前系统中进程状态的常用命令,比如我们可以通过以下命令查看当前系统所有进程信息: ps -aux 执行结果如下: 如果查看指定的进程,如java进程,可以通过管道符和grep命令进行过滤,命令如下: ps -aux|grep java 执行结果如下: ps命令详细介绍 ps命令的用法如下:...

kvm虚拟机磁盘文件读取小结

kvm虚拟机磁盘挂载还真不是一帆风顺的。xen虚拟化默认就raw格式的磁盘,可以直接挂载,kvm如果采用raw也可以直接挂载,与xen磁盘挂载方式一致。 本文出自:http://koumm.blog.51cto.com 1.kvm虚拟化相比xen虚拟化来说,工具与方法众多,本文列举思路如下: (1)raw格式的磁盘可以直接挂载,可以将qcow2磁盘转换成r...

Linux段管理,BSS段,data段,.rodata段,text段

         近期在解决一个编译问题时,一直在考虑一个问题,那就是Linux下可执行程序执行时内存是什么状态,是依照什么方式分配内存并执行的。查看了一下资料。就此总结一下,众所周知。linux下内存管理是通过虚存管理的,在分配内存是并不是在物理内存开辟了一段空间,而是在使用时才分配的。并且是通过段页式管理。 以上比較废话,開始看看程序执行时内存会是什...

RedHat7搭建KVM虚拟机

RedHat7搭建KVM虚拟机 1. 宿主机安装RedHat7.3系统 1.1选择语言 中文、简体中文(中国) 1.2安装位置 1.2.1自定义分区,选择LVM,将分区空间全部分配给根 1.2.2禁用Kdump 2.安装KVM 2.1安装前准备 2.1.1配置yum源 2.1.2防火墙处理 setenforce 0  sed -i 's/SELINUX=e...

AIX/Linux/HP-UX查看CPU/内存/磁盘/存储命令

1.1    硬件环境验证方式 硬件环境主要包括CPU、内存、磁盘/存储、网络设备(如F5等)、系统特有设备(如密押设备等)等,其中网络设备和系统特有设备由网络管理员或项目组提供为准,本节主要关注CPU、内存、磁盘/存储的验证方式。 1.1.1  AIX平台 CPU/内存 【命令】prtconf 【示例】 root@P78010V7:/#prtconf...