// userProg.c++ #include using namespace std; #include "myHeap.h" #include #include #include #include #include #include myHeap_t **memoryP; typedef struct node{ int data; struct node *next; } node_t; void printFreeList(myHeap_t *); int main(){ int shmID, n, pid, status; struct shmid_ds buff; node_t **lP; shmID = shmget(IPC_PRIVATE, SIZE+sizeof(node_t *), IPC_CREAT | 0777); lP = (node_t **)shmat(shmID, 0, 0777); memoryP = (myHeap **)(lP+1); initMyHeap(); cout << "Enter a positive integer: "; cin >> n; if((pid = fork()) == -1){ cerr << "fork() fails\n"; exit(1); } if(pid == 0){ // child node_t *l = NULL, *nP; cout << "Enter " << n << " data\n"; for(int i=0; i> nP->data; nP->next = l; l = nP; } *lP = l; } else{ // parent node_t *nP; waitpid(pid, &status, 0); nP=*lP; while(nP) { cout << nP->data << " "; nP = nP->next; } cout << endl; // Testing free .... // cout << "memoryP: " << hex << memoryP << endl; initMyHeap(); printFreeList(*memoryP); void *rp=myMalloc(100); cout << "rp: " << rp << endl; printFreeList(*memoryP); myFree(rp); printFreeList(*memoryP); rp=myMalloc(150); cout << "rp: " << rp << endl; printFreeList(*memoryP); myFree(rp); printFreeList(*memoryP); mergeFL(); printFreeList(*memoryP); shmdt(memoryP); shmctl(shmID, IPC_RMID, &buff); } return 0; } void printFreeList(myHeap_t *l){ cout << "Free list: "; while(l){ cout << hex << l << ", "; cout << " size: " << l->size << ", "; l = l->next; } cout << endl; }