void InitFreeMaps() { string free_file_name = dbname_+".free"; if(access(free_file_name.c_str(), F_OK) < 0) //file not exist, nothing to do return; int free_fd = ::Open(free_file_name, O_RDWR); ::Unlink(free_file_name); //unlink it int n_free_node, n_free_data; ::Read(free_fd, &n_free_node, sizeof(n_free_node)); ::Read(free_fd, &n_free_data, sizeof(n_free_data)); Link l; for(int i=0; i<n_free_node; i++) { Link::Read(&l, free_fd); free_node_[l.GetTotalSize()] = l; } for(int i=0; i<n_free_data; i++) { Link::Read(&l, free_fd); free_data_[l.GetTotalSize()] = l; } ::Close(free_fd); }