linux c文件编程

2019-07-13 03:31发布

嵌入式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 #include #include #include #include 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. ", fileName, fileSize); return 0; } 运行结果:这里写图片描述 通过c语言获取到的文件大小和stat命令获取到的文件大小一致。