嵌入式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命令获取到的文件大小一致。