iniLoadFromFile
|-----iniInitContext
| |-----hash_init_ex
| |-----_has_alloc_buckets
|-----iniDoLoadFormFile
| |-----get_url_content
| |-----getFileContent
| |-----iniDoLoadItemsFromBuffer
| |-----iniDoloadFromFile
| |-----hash_find
| |-----_chain_find_entry
| |-----hash_insert
| |-----hash_insert_ex
|-----iniSortItems
| |-----hash_walk
getFileContent:根据文件路径,读取文件数据
-
int getFileContent(const char *filename, char **buff, int64_t *file_size) //filename:完整的文件名,buff:读取数据的缓冲区,file_size:数据的长度,其中buff与file_size从函数中传出
-
{
-
int fd;
-
-
fd = open(filename, O_RDONLY); //以只读方式打开文件
-
if (fd < 0)
-
{
-
*buff = NULL;
-
*file_size = 0; //置为0
-
return errno != 0 ? errno : ENOENT;
-
}
-
-
if ((*file_size=lseek(fd, 0, SEEK_END)) < 0)//通过lseek的这种方式可以获取文件大小
-
{
-
*buff = NULL;
-
*file_size = 0;
-
close(fd);
-
return errno != 0 ? errno : EIO;
-
}
-
-
*buff = (char *)malloc(*file_size + 1);//分配空间,这里参数传入的必须是char**,分配的空间才能返回,分配比文件长度多一个字节的空间
-
if (*buff == NULL)
-
{
-
*file_size = 0;
-
close(fd);
-
-
return errno != 0 ? errno : ENOMEM;
-
}
-
-
if (lseek(fd, 0, SEEK_SET) < 0)//通过lseek的这种方式让文件指针回到文件头部
-
{
-
*buff = NULL;
-
*file_size = 0;
-
close(fd);
-
return errno != 0 ? errno : EIO;
-
}
-
if (read(fd, *buff, *file_size) != *file_size)//一次性读取整个文件的数据
-
{
-
free(*buff);
-
*buff = NULL;
-
*file_size = 0;
-
close(fd);
-
return errno != 0 ? errno : EIO;
-
}
-
-
(*buff)[*file_size] = '\0';//buff的最后一个字符置0
-
close(fd);
-
-
return 0;
-
}
getFileContent函数在函数内部分配了空间,所以调用该函数后,需要在外部释放分配的空间
阅读(1170) | 评论(0) | 转发(0) |