00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "ux.hpp"
00019
00020 using namespace Ux;
00021
00022
00023
00024
00025 key_t SysVIPC::ftok(const char *path, int id)
00026 {
00027 key_t k;
00028
00029 if ((k = ::ftok(path, id)) == -1)
00030 throw Error(errno);
00031 return k;
00032 }
00033
00034
00035
00036
00037 void SysVMsg::get(key_t key, int flags)
00038 {
00039 if ((id = ::msgget(key, flags)) == -1)
00040 throw Error(errno);
00041 }
00042
00043
00044
00045
00046 void SysVMsg::ctl(int cmd, struct msqid_ds *data)
00047 {
00048 if (::msgctl(id, cmd, data) == -1)
00049 throw Error(errno);
00050 }
00051
00052
00053
00054
00055 void SysVMsg::snd(const void *msgp, size_t msgsize, int flags)
00056 {
00057 if (::msgsnd(id, msgp, msgsize, flags) == -1)
00058 throw Error(errno);
00059 }
00060
00061
00062
00063
00064 ssize_t SysVMsg::rcv(void *msgp, size_t mtextsize, long msgtype, int flags)
00065 {
00066 ssize_t n;
00067
00068 if ((n = ::msgrcv(id, msgp, mtextsize, msgtype, flags)) == -1)
00069 throw Error(errno);
00070 return n;
00071 }
00072
00073
00074
00075
00076 void SysVShm::get(key_t key, size_t size, int flags)
00077 {
00078 if ((id = ::shmget(key, size, flags)) == -1)
00079 throw Error(errno);
00080 }
00081
00082
00083
00084
00085 void SysVShm::ctl(int cmd, struct shmid_ds *data)
00086 {
00087 if (::shmctl(id, cmd, data) == -1)
00088 throw Error(errno);
00089 }
00090
00091
00092
00093
00094 void *SysVShm::at(const void *shmaddr, int flags)
00095 {
00096 void *p;
00097
00098 if ((p = ::shmat(id, shmaddr, flags)) == (void *)-1)
00099 throw Error(errno);
00100 return p;
00101 }
00102
00103
00104
00105
00106 void SysVShm::dt(const void *shmaddr)
00107 {
00108 if (::shmdt(shmaddr) == -1)
00109 throw Error(errno);
00110 }
00111
00112
00113
00114
00115 void SysVSem::get(key_t key, int nsems, int flags)
00116 {
00117 if ((id = ::semget(key, nsems, flags)) == -1)
00118 throw Error(errno);
00119 }
00120
00121
00122
00123
00124 int SysVSem::ctl(int semnum, int cmd, union semun arg)
00125 {
00126 int r;
00127
00128 if ((r = ::semctl(id, semnum, cmd, arg)) == -1)
00129 throw Error(errno);
00130 return r;
00131 }
00132
00133
00134
00135
00136 void SysVSem::op(struct sembuf *sops, size_t nsops)
00137 {
00138 if (::semop(id, sops, nsops) == -1)
00139 throw Error(errno);
00140 }