linux c文件编程

嵌入式linux c文件编程

(1)文件的打开操作,获取文件大小

1.1 文件的打开可以使用fopen函数,该函数为:

FILE *fopen(const char *path, const char *mode);
这里写图片描述

1.2 获取文件的大小

获取文件的大小需要使用fseek定位文件位置指针到文件末尾,ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数,rewind函数用于使文件指针重新返回文件的开头。可以使用如下代码获取文件大小:

int getFileSize(char *fileName)
{
    FILE *fp     = NULL;
    int fileSize = 0;

    fp = fopen(fileName, "rb");
    if (fp == NULL)
    {
        perror("open file failed");
    }

    (void)fseek(fp, 0L, SEEK_END);
    fileSize = ftell(fp);
    rewind(fp);

    fclose(fp);
    return fileSize;    
}

(2)文件的读写操作

2.1 读取文件的内容

文件的读写使用
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
其中ptr为使用的读写缓冲区, size表示每次写入size大小数据,nmemb表示写入n个size大小的数据块,stream为读取或者写入内容的文件。可以使用如下代码读取文件到内存:

char* getFileContent(char* fileName)
{
    FILE *fp = NULL;
    char *fileBuffer = NULL;

    int fileSize = 0;

    fileSize = getFileSize(fileName);

    fp = fopen(fileName, "rb");
    if (fp == NULL)
    {
        perror("open file failed");
        return NULL;
    }

    fileBuffer = (char*)malloc(fileSize);
    if (fileBuffer == NULL)
    {
        perror("malloc memory failed");
        return NULL;
    }

    fread(fileBuffer, fileSize, 1, fp);
    fclose(fp);
    return fileBuffer;    
}

读取文件成功后,可以将fileBuffer转换为有意义的结构体成员使用。

(3)文件读取的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <time.h>

typedef struct tagFILE_SLICE_S
{
    char *buffer;
    int length;
    struct tagFILE_SLICE_S* nextSlice;
}FILE_SLICE;

int getFileSize(char *fileName)
{
    FILE *fp     = NULL;
    int fileSize = 0;

    fp = fopen(fileName, "rb");
    if (fp == NULL)
    {
        perror("open file failed");
    }

    (void)fseek(fp, 0L, SEEK_END);
    fileSize = ftell(fp);
    rewind(fp);

    fclose(fp);
    return fileSize;    
}

char* getFileContent(char* fileName)
{
    FILE *fp = NULL;
    char *fileBuffer = NULL;

    int fileSize = 0;

    fileSize = getFileSize(fileName);

    fp = fopen(fileName, "rb");
    if (fp == NULL)
    {
        perror("open file failed");
        return NULL;
    }

    fileBuffer = (char*)malloc(fileSize);
    if (fileBuffer == NULL)
    {
        perror("malloc memory failed");
        return NULL;
    }

    fread(fileBuffer, fileSize, 1, fp);
    fclose(fp);
    return fileBuffer;    
}

int main(int argc, char *argv[])
{
    char *fileName   = NULL;
    char *fileBuffer = NULL;
    int fileSize     = 0;

    fileName = argv[1];
    fileSize = getFileSize(fileName);
    fileBuffer = getFileContent(fileName);
    printf("file name is:%s, file size:%d.\n", fileName, fileSize);

    return 0;
}

运行结果:这里写图片描述

通过c语言获取到的文件大小和stat命令获取到的文件大小一致。

猜你喜欢

转载自blog.csdn.net/zhaoyaxiong_ctu/article/details/80531079