Linux下的stat函数是专门用来获取文件状态的API,需要一个结构体struct stat
定义如下:
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
}
其中st_size是文件大小,类型是off_t,其实就是long,在64位机下是8位,可以表示文件大小为2^63-1B,换算成G是8589934592GB,比1TB的硬盘都要大(在32位机下long是4位,最大能表示2G的文件,如果在32位机获取大于2G文件的大小,就很难处理)
stat函数需要2个参数:一个是文件位置,struct stat变量用来返回文件信息;返回值-1失败,0成功
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
struct stat statbuff;
if( -1==stat("./Ubuntu-16.04.2.vdi", &statbuff) )
{
printf("stat wrong\n");
}
else
{
printf("stat success.%ld\n", statbuff.st_size);
}
}
6.3G的文件,结果如下图;
在linux下获得文件大小还可以使用ftell函数,不过需要打开文件和移动文件指针,操作会麻烦一点。