int main(int argc, char* argv[]){ char buffer[BUFFER_SIZE]; int index, pages; int requests = 0; int faults = 0; if(argc < 1){ printf("Too many arguments. Please look at documentation to compile.\n"); return 0; } sscanf(argv[1], "%d", &pages); List* list = create(pages); FILE* fp = fopen("out.txt", "w"); assert(fp != NULL); while(fgets(buffer, sizeof(buffer), stdin) != NULL) { if(!isdigit((int)buffer[0])) continue; sscanf(buffer, "%d", &index); requests++; if(findNode(list, index) != NULL){ setNodeRef(list, index, requests); } else{ if(listFull(list)){ replaceNode(list, findMinNode(list), index); setNodeRef(list, index, requests); } else{ insertNode(list, index, 0 ,0); setNodeRef(list, index, requests); } faults++; assert(fprintf(fp, "%d \n", index) >= 0); } } // while fclose(fp); free(list); printf("Number of page requests: %d \nNumber of page faults: %d \n", requests, faults); return 1; }
static void insertSession(SessionList *list, SubscriberNumber number, ServerId serverId) { SessionElement *e; if( listFull(list) ) return; e = &list->list[list->writeIndex]; strcpy(e->subscriberNumber, number); e->serverId = serverId; list->writeIndex = (list->writeIndex + 1) % SESSION_LIST_LENGTH; list->numberInList++; if( list->numberInList > maxsize ) maxsize = list->numberInList; }