int main(int argc, char **argv) { if (argc != 3) { printf("Usage: %s mmap_directory revision_input_file\n", argv[0]); exit(1); } struct revision_stats stats; get_file_stats(argv[2], &stats); printf("%d max user, %d max page, %"PRId64" max revision, %"PRId64" total revisions\n", stats.max_user_id, stats.max_page_id, stats.max_revision_id, stats.total_revisions); char *user_index_mmap_name = full_path(argv[1], USER_INDEX_MMAP_NAME); char *page_index_mmap_name = full_path(argv[1], PAGE_INDEX_MMAP_NAME); char *revisions_mmap_name = full_path(argv[1], REVISIONS_MMAP_NAME); char *user_index_mmap = create_mmap(user_index_mmap_name, user_index_mmap_size(&stats)); char *page_index_mmap = create_mmap(page_index_mmap_name, page_index_mmap_size(&stats)); char *revisions_mmap = create_mmap(revisions_mmap_name, revision_mmap_size(&stats)); ((struct user_header*)user_index_mmap)->count_users = stats.max_user_id + 1; ((struct page_header*)page_index_mmap)->count_pages = stats.max_page_id + 1; ((struct revision_header*)revisions_mmap)->count_revisions = stats.max_revision_id + 1; fill_mmaps(argv[2], &stats, user_index_mmap, page_index_mmap, revisions_mmap); free(user_index_mmap_name); free(page_index_mmap_name); free(revisions_mmap_name); return 0; }
int main() { create_mmap(0x10000, 0x2000000); create_mmap(0x07000000, 0x01000000); change_permission(start); start(); zby_hit_bad_trap(); return 0; }
static int load_mmap() { char full_path[DIR_PATH_LEN] = {0}; int i = 0; cdn_speed_ip_mmap = (my_mmap_t*)malloc( max_project_number * sizeof(my_mmap_t) ); cdn_speed_area_mmap = (my_mmap_t*)malloc( max_project_number * sizeof(my_mmap_t) ); url_page_mmap = (my_mmap_t*)malloc(max_page_per_proj * max_project_number * sizeof(my_mmap_t)); snprintf(full_path, sizeof(full_path), "%s/%s", idc_mmap_file_dirpath,"idc_test_ip_mmap"); idc_test_ip_mmap.type = MMAP_TYPE_IDC_IP; if (create_mmap(full_path, idc_mmap_size_ip, &idc_test_ip_mmap) != 0) return -1; if(idc_test_ip_mmap.mmap_head->records_num != 0)//mmap中有数据,则根据mmap更新hash表 set_hash_for_ip_mmap(idc_hash_ip, &idc_test_ip_mmap, idc_test_ip_mmap.type); idc_test_area_mmap.type = MMAP_TYPE_IDC_AREA; snprintf(full_path, sizeof(full_path), "%s/%s", idc_mmap_file_dirpath,"idc_test_area_mmap"); if (create_mmap(full_path, idc_mmap_size_area, &idc_test_area_mmap) != 0) return -1; //重启时重设records idc_test_area_mmap.records_num = idc_test_area_mmap.mmap_head->records_num = 0; for(i = 1; i <= max_project_number; i++) { snprintf(full_path, sizeof(full_path), "%s/%s%03d", cdn_mmap_file_dirpath,"cdn_speed_ip_mmap",i); cdn_speed_ip_mmap[ i-1 ].type = MMAP_TYPE_CDN_IP; if (create_mmap(full_path, cdn_mmap_size_ip, &cdn_speed_ip_mmap[ i-1 ]) != 0) return -1; if(cdn_speed_ip_mmap[ i-1 ].mmap_head->records_num != 0) set_hash_for_ip_mmap(cdn_hash_ip[i-1], &cdn_speed_ip_mmap[ i-1 ], cdn_speed_ip_mmap[ i-1 ].type); cdn_speed_area_mmap[ i-1 ].type = MMAP_TYPE_CDN_AREA; snprintf(full_path, sizeof(full_path), "%s/%s%03d", cdn_mmap_file_dirpath,"cdn_speed_area_mmap",i); if (create_mmap(full_path, cdn_mmap_size_area, &cdn_speed_area_mmap[ i-1 ]) != 0) return -1; cdn_speed_area_mmap[ i-1 ].records_num = cdn_speed_area_mmap[ i-1 ].mmap_head->records_num = 0; } //url_page's mmap int j, pos; url_page_status = (url_page_used_t*)malloc(sizeof(url_page_used_t) * max_project_number); if(url_page_status == NULL) ERROR_RETURN(("URL PAGE STATUS CREATE FAILED!") ,-1); for(i = 0; i < max_project_number; i++) { url_page_status[i].used_count = 0; for (j = 0; j < max_page_per_proj; j++) url_page_status[i].status[j] = 0; } for(i = 1; i <= max_project_number; i++) { for(j = 1; j <= max_page_per_proj; j++) { snprintf(full_path, sizeof(full_path), "%s/%s%03d_%03d", url_mmap_file_dirpath,"url_page_mmap", i, j); pos = (i-1) * max_page_per_proj + (j-1); url_page_mmap[pos].type = MMAP_TYPE_URL; if (create_mmap(full_path, url_mmap_size_page, &url_page_mmap[pos]) == -1) return -1; //加入hash表 url_page_index[i] if(url_page_mmap[pos].key > 0 && url_page_mmap[pos].value > 0 && url_page_mmap[pos].value < max_page_per_proj) { g_hash_table_insert(url_page_index[i-1], &(url_page_mmap[pos].key), &(url_page_mmap[pos].value)); url_page_status[i-1].used_count ++; url_page_status[i-1].status[url_page_mmap[pos].value] = 1; } url_page_mmap[pos].records_num = url_page_mmap[pos].mmap_head->records_num = 0; } } return 0; }