欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux c文件编程

程序员文章站 2022-07-12 12:18:23
...

嵌入式linux c文件编程

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

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

FILE *fopen(const char *path, const char *mode);
linux c文件编程

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;
}

运行结果:linux c文件编程

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