Пример #1
0
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;
}
Пример #2
0
int main()
{
    create_mmap(0x10000, 0x2000000);
    create_mmap(0x07000000, 0x01000000);
    change_permission(start);
    start();
    zby_hit_bad_trap();
    return 0;
}
Пример #3
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;
}