#include #include #include #include #include #include "err.h" using namespace std; int main () { struct sembuf sembuf[10], *sops; int retrn, flags, sem_num, semid, op; unsigned i, nsops; sops = sembuf; cout << "Enter the semid of the semaphore set = "; cin >> semid ; cout << endl << "semid = " << semid << endl; cout << "Enter the number of operations on this set = "; cin >> nsops; cout << endl; for ( i = 0; i < nsops; i++, sops++) { cout << "Enter semaphore number = "; cin >> sem_num ; cout << endl; sops->sem_num = sem_num; cout << "Enter the operation = "; cin >> op; cout << endl; sops->sem_op = op; cout << "sem_num = " << sops->sem_num << " sem_op = " << sops->sem_op << endl; cout << "Flags:" << endl; cout << " 0 ---> No flags " << endl; cout << " 1 ---> IPC_NOWAIT " << endl; cout << " 2 ---> SEM_UNDO " << endl; cout << " 3 ---> IPC_NOWAIT and SEM_UNDO " << endl; cout << "flag = "; cin >> flags; cout << endl; switch ( flags ) { case 0: sops->sem_flg = 0; break; case 1: sops->sem_flg = IPC_NOWAIT; break; case 2: sops->sem_flg = SEM_UNDO; break; case 3: sops->sem_flg = SEM_UNDO | IPC_NOWAIT; break; } cout << "Flags = " << sops->sem_flg << endl; } /* for */ sops = sembuf; /*************************************************************/ retrn = semop( semid, sops, nsops ); /*************************************************************/ if ( retrn == -1 ) syserr("semop"); cout << "Semop was successful!" << endl; cout << "Semop return ---->" << retrn << endl; return 0; }