testcat 发表于 2022-11-20 06:38:25

求教关于虚拟文件系统获取文件大小的问题

最近在看一些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]
查看完整版本: 求教关于虚拟文件系统获取文件大小的问题