int zone_contents_add_rr(zone_contents_t *z, const knot_rrset_t *rr, zone_node_t **n) { if (z == NULL || rr == NULL) { return KNOT_EINVAL; } return insert_rr(z, rr, n, rrset_is_nsec3rel(rr)); }
/** enter data RR into auth zone */ static int lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) { uint8_t* nm; size_t nmlen; int nmlabs; struct local_data* node; struct local_rrset* rrset; struct packed_rrset_data* pd; uint16_t rrtype = 0, rrclass = 0; time_t ttl = 0; uint8_t rr[LDNS_RR_BUF_SIZE]; uint8_t* rdata; size_t rdata_len; if(!get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, sizeof(rr), &rdata, &rdata_len)) { log_err("bad local-data: %s", rrstr); return 0; } log_assert(z->dclass == rrclass); if(z->type == local_zone_redirect && query_dname_compare(z->name, nm) != 0) { log_err("local-data in redirect zone must reside at top of zone" ", not at %s", rrstr); free(nm); return 0; } nmlabs = dname_count_size_labels(nm, &nmlen); if(!lz_find_create_node(z, nm, nmlen, nmlabs, &node)) { free(nm); return 0; } log_assert(node); free(nm); rrset = local_data_find_type(node, rrtype); if(!rrset) { rrset = new_local_rrset(z->region, node, rrtype, rrclass); if(!rrset) return 0; if(query_dname_compare(node->name, z->name) == 0) { if(rrtype == LDNS_RR_TYPE_NSEC) rrset->rrset->rk.flags = PACKED_RRSET_NSEC_AT_APEX; if(rrtype == LDNS_RR_TYPE_SOA) z->soa = rrset->rrset; } } pd = (struct packed_rrset_data*)rrset->rrset->entry.data; log_assert(rrset && pd); /* check for duplicate RR */ if(rr_is_duplicate(pd, rdata, rdata_len)) { verbose(VERB_ALGO, "ignoring duplicate RR: %s", rrstr); return 1; } return insert_rr(z->region, pd, rdata, rdata_len, ttl); }
void roundrun_init(char chose) { PCB *p; int i,time; char na[10]; ready=NULL; finish=NULL; run=NULL; printf("\t\t循环轮转算法模拟全过程\n\n"); printf("输入进程 的个数 N:\n"); scanf("%d",&N); for(i=0;i<N;i++) { p=(PCB*)malloc(sizeof(PCB)); printf("输入第%d个进程名\n",i+1); scanf("%s",na); printf("完成进程需要的时间片数\n"); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->count=0; p->state='W'; p->round=2; if(ready!=NULL) { insert_rr(p); } else { p->next=ready; ready=p; tail=p; } printf("当前就绪队列的进程的信息\n"); print(chose); } printf("%d个进程已按FIFO进到就绪队列中\n",N); printf("按回车键开始模循环轮转算法.....\n"); fflush(stdin); getchar(); run=ready; ready=ready->next; run->state='R'; }
void roundrun(char chose) { int i=1; while(run!=NULL) { run->cputime+=1; run->needtime-=1; run->count+=1; if(run->needtime==0) { run->next=finish; finish=run; run->state='F'; run->prio=0; run=NULL; if(ready!=NULL) { firstin(); } } else { if(run->count==run->round) { run->count=0; if(ready!=NULL) { run->state='W'; insert_rr(run); firstin(); } } } print(chose); } getchar(); }