a
jconf_t * read_jconf(const char *file) { static jconf_t conf; // 清空数据 memset(&conf, 0, sizeof(jconf_t)); // 用于存储文件内容的字符串指针 char *buf; // 解析文件内容后的json结构化数据 json_value *obj; // 打开文件 FILE *f = fopen(file, "rb"); if (f == NULL) { FATAL("Invalid config path."); } // 确定文件大小, 并将读取指针移回文件开始 fseek(f, 0, SEEK_END); long pos = ftell(f); fseek(f, 0, SEEK_SET); if (pos < 0) { FATAL("Invalid config path."); } if (pos >= MAX_CONF_SIZE) { FATAL("Too large config file."); } // 根据文件大小申请内存空间, 注意这边要多申请1个字节用于存放' ' buf = ss_malloc(pos + 1); if (buf == NULL) { FATAL("No enough memory."); } // 读取文件内容至buff int nread = fread(buf, pos, 1, f); if (!nread) { FATAL("Failed to read the config file."); } // 关闭文件 fclose(f); // 关闭字符串结尾 buf[pos] = '