求教关于虚拟文件系统获取文件大小的问题
最近在看一些Linux相关的东西, 这个虚拟文件系统下的文件, 使用ls命令查看得到的大小为0, 使用代码编程得到的大小也为0. 我知道这不是真实存在于磁盘上的文件, 而是内核模块内存映射过来的虚拟文件, 但是应该也有方法可以得到它的大小把, 不然我每次获取它的信息, 准备缓冲区的话, 难道每次都要开辟足够大的缓冲区嘛?好像虚拟文件系统的限制好像是4096,(不知真假, 请大佬赐教). 我使用了C库和POSIX API均获得文件大小为0 。难道要使用内核API嘛?#include <stdio.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <sys/statfs.h>
// 获取文件大小,使用C标准库
long getFileSize(const char *fileName)
{
FILE *fp = fopen(fileName, "r");
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
fclose(fp);
return size;
}
// 获取文件大小,使用POSIX标准库函数
long getFileSizeByPosix(const char *fileName)
{
struct stat st;
stat(fileName, &st);
return st.st_size;
}
// 获取虚拟文件系统的文件大小
long getVFSFileSize(const char *fileName)
{
struct statfs stfs;
statfs(fileName, &stfs);
return stfs.f_bsize * stfs.f_blocks;
// struct statvfs stvfs;
// statvfs(fileName, &stvfs);
// return stvfs.f_frsize * stvfs.f_blocks;
}
int main(int argc,char* argv[]){
printf("%ld字节\r\n",getFileSize("/proc/cpuinfo"));
printf("%ld字节\r\n",getFileSizeByPosix("/proc/cpuinfo"));
printf("%ld字节\r\n",getVFSFileSize("/proc/cpuinfo"));
return 0;
}
页:
[1]