linux写文件超过大小,linux下c语言编程,获取超大文件大小(size超过2GB)

最近做一个项目,需要获取文件大小,而文件大小又是超过 2GB 的。这就导致很多 c 标准函数不能正常工作。

linux c语言获取文件大小常用方法

常用方法有两类:利用 seek 系函数。

以 lseek 函数为例,它可以将定位要读写文件的位置,正常情况下,它会返回当前读写指针位置。让其指向文件末尾,即可获得文件大小。

利用 stat 系函数。

推荐用这个函数,比较简单,是专用来获取文件信息的函数。

seek 系函数获取文件大小

直接上代码:

stat 系函数获取文件大小

为何seek函数stat函数不能获取大于2GB的超大文件大小

以上介绍的两个例子在获取小于 2GB 的文件大小时,可以很好的工作,但是当文件大小大于 2GB 时,就不正常了。

其实,这主要是数据类型的长度限制的。lseek 的函数原型如下:

struct stat 的原型如下:

会发现,咱们要返回的值类型都是 off_t 的。

执行以下代码:

输出如果是 4,就很好理解为何以上函数只能获取小于 2GB 的文件大小了。

linux C语言获取大于2GB的超大文件大小

在/usr/include中执行shell命令:

查找 off_t类型的定义可以看出,off_t其实拥有两种类型:__off_t和__off64_t

要使 off_t为__off64_t类型,必须

还找到了这个:

所以,我们在包含所有头文件之前,需要:

这样就可以64位偏移地址形式操作文件。

咱们以 stat 函数为例,使用其 64 位类型的函数,代码如下:

应该很容易看懂,这样,咱们就完成了 linux 下C语言获取大于2GB的超大文件大小的代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值