Kvs_t* in(const char* path) { Kvs_t* kvs = init_kvs(); FILE* instream; if ((instream = fopen(path, "rb")) == NULL) { return kvs; } int count; fread(&count, sizeof(int), 1, instream); if(count <= 0) { fclose(instream); return kvs; } Key_t key; size_t size; for(int i = 0; i < count; i++) { fread(&key, sizeof(Key_t), 1, instream); fread(&size, sizeof(size_t), 1, instream); Value_t value = malloc(size); fread(value, size, 1, instream); kvs = add_kv(kvs, make_kv(key, value, size)); } fclose(instream); return kvs; }
hash_table_t * load_alts(const char * path, size_t hs, char a[][BUFSIZ]) { char buffer[BUFSIZ]; FILE * alts_file; hash_table_t * hash_table; uint32_t i, j, k; hash_table = hash_table_init(hs); alts_file = fopen(path, "r"); for (i = 0; i < NUMA; i++) { fgets(buffer, BUFSIZ, alts_file); char * key = malloc(BUFSIZ); char * val = malloc(BUFSIZ); memset(key, '\0', BUFSIZ); memset(val, '\0', BUFSIZ); for (j = 0; j < BUFSIZ; j++) { if (buffer[j] == ',') { key[j] = '\0'; break; } key[j] = buffer[j]; } for (k = j + 1; k < BUFSIZ; k++) { if (buffer[k] == '\n') { val[k-j-1] = '\0'; break; } val[k-j-1] = buffer[k]; if (buffer[k] == '\0') break; } snprintf(a[i], BUFSIZ, "%s", key); key_val_t * kv = make_kv(key, strlen(key)+1, val, strlen(val)+1); hash_table_insert(hash_table, kv); free(kv); } fclose(alts_file); return hash_table; }
/** * 添加一个参数 */ Kvs_t* add_param(Kvs_t* kvs, Param_t* pParam) { Kv_t* kv = make_kv(pParam -> id, pParam, sizeof(Param_t)); return add_kv(kvs, kv); }
/** * 添加一条记录 */ Kvs_t* add_record(Kvs_t* kvs, Record_t* pRecord) { Kv_t* kv = make_kv(pRecord -> id, pRecord, sizeof(Record_t)); return add_kv(kvs, kv); }