#include "common.h" #include "svshm.h" #include "squeue.h" using namespace std; void sigint_handler(int sig) { mm_deinit(); exit(0); } int main(int argc, char *argv[]) { int semid; void *shmp; signal(SIGINT, sigint_handler); /* Get IDs for semaphore set and shared memory created by writer */ semid = semget(SEM_KEY, 0, 0); if (semid == -1) err_exit(errno, "semget"); /*mm_init(sizeof(deque >), &shmp);*/ /*deque > *queue = (deque > *) shmp;*/ SQueue *queue; int first = mm_init(sizeof(SQueue), &shmp); if (first == 1) queue = new(shmp) SQueue; else queue = (SQueue *) shmp; /* Transfer blocks of data from shared memory to stdout */ while(1) { if (reserveSem(semid, READ_SEM) == -1) /* Wait for our turn */ err_exit(errno, "reserveSem"); std::cout << "====queue size=" << queue->size() << ", content as following===\n"; for (size_t i = 0; i < queue->size(); ++i) { // cout <<"v ptr="<< &((*v)[i])<<",value=" << (*v)[i] << endl; struct Item & item = (*queue)[i]; cout << item.pic << " " << item.info << endl; } //std::cout << queue->front() << "\n"; if (releaseSem(semid, WRITE_SEM) == -1) /* Give writer a turn */ err_exit(errno, "releaseSem"); } /*if (shmdt(shmp) == -1)*/ /*err_exit(errno, "shmdt");*/ /* Give writer one more turn, so it can clean up */ if (releaseSem(semid, WRITE_SEM) == -1) err_exit(errno, "releaseSem"); mm_deinit(); exit(EXIT_SUCCESS); }