首页 > 代码库 > C一次将整个文件读入内存

C一次将整个文件读入内存

最近工作,有个需求需要将YUV的整个文件读入内存,然后处理这些YUV数据,一种比较有效的方法如下:

#include <stdio.h>#include <stdlib.h> int main (){    FILE * pFile;    long lSize;    char * buffer;    size_t result;     /* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */    pFile = fopen ("test.txt", "rb" );    if (pFile==NULL)    {        fputs ("File error",stderr);        exit (1);    }     /* 获取文件大小 */    fseek (pFile , 0 , SEEK_END);    lSize = ftell (pFile);    rewind (pFile);     /* 分配内存存储整个文件 */    buffer = (char*) malloc (sizeof(char)*lSize);    if (buffer == NULL)    {        fputs ("Memory error",stderr);        exit (2);    }     /* 将文件拷贝到buffer中 */    result = fread (buffer,1,lSize,pFile);    if (result != lSize)    {        fputs ("Reading error",stderr);        exit (3);    }    /* 现在整个文件已经在buffer中,可由标准输出打印内容 */    printf("%s", buffer);     /* 结束演示,关闭文件并释放内存 */    fclose (pFile);    free (buffer);    return 0;}

在用户态可以很方便的测试这个例子,可以写一个简单的程序,读入YUV422格式含有多帧的文件,然后操作这块内存,获取单独的Y分量数据和C分量数据,也可以按帧操作此文件。

C一次将整个文件读入内存