|
|
1.1 ! root 1: head 1.3; ! 2: access ; ! 3: symbols ; ! 4: locks bin:1.3; ! 5: comment @ * @; ! 6: ! 7: ! 8: 1.3 ! 9: date 91.06.03.21.46.56; author bin; state Exp; ! 10: branches ; ! 11: next 1.2; ! 12: ! 13: 1.2 ! 14: date 91.05.30.00.06.23; author bin; state Exp; ! 15: branches ; ! 16: next 1.1; ! 17: ! 18: 1.1 ! 19: date 91.05.29.23.57.18; author bin; state Exp; ! 20: branches ; ! 21: next ; ! 22: ! 23: ! 24: desc ! 25: @steve 5/29/91 ! 26: Initial MWC RCS revision. ! 27: @ ! 28: ! 29: ! 30: 1.3 ! 31: log ! 32: @steve 6/3/91 ! 33: Corrected bug introduced by last source revision: key is 4 bytes, not 2. ! 34: @ ! 35: text ! 36: @/* ! 37: * libc/sys/msgop.c ! 38: * User Message Functions. ! 39: * Note: msgget() must be first function called. ! 40: */ ! 41: ! 42: #include <sys/msg.h> ! 43: #include <errno.h> ! 44: ! 45: static int msgfno = -1; ! 46: static char msgdev[] = "/dev/msg"; ! 47: ! 48: /* ! 49: * Message Control Operations. ! 50: */ ! 51: msgctl(msqid, cmd, buf) int msqid, cmd; struct msqid_ds * buf; ! 52: { ! 53: int parm[4]; ! 54: ! 55: if (msgfno < 0) { ! 56: errno = ENODEV; ! 57: return -1; ! 58: } ! 59: ! 60: parm[0] = -1; ! 61: parm[1] = msqid; ! 62: parm[2] = cmd; ! 63: parm[3] = (int) buf; ! 64: ! 65: ioctl(msgfno, MSGCTL, parm); ! 66: return parm[0]; ! 67: } ! 68: ! 69: /* ! 70: * Get Message Queue. ! 71: */ ! 72: msgget(key, msgflg) key_t key; int msgflg; ! 73: { ! 74: int parm[4]; ! 75: ! 76: if (msgfno < 0) { ! 77: if ((msgfno = open(msgdev, 0)) < 0) { ! 78: perror(msgdev); ! 79: errno = ENODEV; ! 80: return -1; ! 81: } ! 82: } ! 83: ! 84: parm[0] = -1; ! 85: parm[1] = key; ! 86: parm[2] = key >> 16; ! 87: parm[3] = msgflg; ! 88: ! 89: ioctl(msgfno, MSGGET, parm); ! 90: return parm[0]; ! 91: } ! 92: ! 93: /* ! 94: * Send Message. ! 95: */ ! 96: msgsnd(msqid, msgp, msgsz, msgflg) int msqid; struct msgbuf *msgp; int msgsz, msgflg; ! 97: { ! 98: int parm[5]; ! 99: ! 100: if (msgfno < 0) { ! 101: errno = ENODEV; ! 102: return -1; ! 103: } ! 104: ! 105: parm[0] = -1; ! 106: parm[1] = msqid; ! 107: parm[2] = (int) msgp; ! 108: parm[3] = msgsz; ! 109: parm[4] = msgflg; ! 110: ! 111: ioctl(msgfno, MSGSND, parm); ! 112: return parm[0]; ! 113: } ! 114: ! 115: /* ! 116: * Receive Message. ! 117: */ ! 118: msgrcv(msqid, msgp, msgsz, msgtyp, msgflg) ! 119: int msqid; struct msgbuf *msgp; int msgsz; long msgtyp; int msgflg; ! 120: { ! 121: int parm[7]; ! 122: ! 123: if (msgfno < 0) { ! 124: errno = ENODEV; ! 125: return -1; ! 126: } ! 127: ! 128: parm[0] = -1; ! 129: parm[1] = msqid; ! 130: parm[2] = (int) msgp; ! 131: parm[3] = msgsz; ! 132: parm[4] = (int) msgtyp; ! 133: parm[5] = (int) (msgtyp >> 16); ! 134: parm[6] = msgflg; ! 135: ! 136: ioctl(msgfno, MSGRCV, parm); ! 137: return parm[0]; ! 138: } ! 139: ! 140: /* end of msgop.c */ ! 141: @ ! 142: ! 143: ! 144: 1.2 ! 145: log ! 146: @steve 5/29/91 ! 147: Added changes from hal. ! 148: Nonsubstantive changes to whitespace. ! 149: @ ! 150: text ! 151: @d6 1 ! 152: a6 1 ! 153: ! 154: d39 1 ! 155: a39 1 ! 156: int parm[3]; ! 157: d51 2 ! 158: a52 1 ! 159: parm[2] = msgflg; ! 160: d61 1 ! 161: a61 2 ! 162: msgsnd(msqid, msgp, msgsz, msgflg) ! 163: int msqid; struct msgbuf *msgp; int msgsz, msgflg; ! 164: @ ! 165: ! 166: ! 167: 1.1 ! 168: log ! 169: @Initial revision ! 170: @ ! 171: text ! 172: @d2 1 ! 173: d4 1 ! 174: a4 5 ! 175: * ! 176: * Note: msgget() must be first function called. ! 177: * ! 178: * 91/02/07 Hal Snyder mwchwc!/u/libc/sys/msgop.c ! 179: * msgget(): sizeof(key_t) is 4, not 2. ! 180: d6 1 ! 181: d16 1 ! 182: a16 7 ! 183: ! 184: msgctl( msqid, cmd, buf ) ! 185: ! 186: int msqid; ! 187: int cmd; ! 188: struct msqid_ds * buf; ! 189: ! 190: d20 1 ! 191: a20 1 ! 192: if ( msgfno < 0 ) { ! 193: d30 1 ! 194: a30 1 ! 195: ioctl( msgfno, MSGCTL, parm ); ! 196: d37 3 ! 197: d41 2 ! 198: a42 13 ! 199: msgget( key, msgflg ) ! 200: ! 201: key_t key; ! 202: int msgflg; ! 203: ! 204: { ! 205: int parm[4]; ! 206: ! 207: if ( msgfno < 0 ) { ! 208: ! 209: msgfno = open(msgdev, 0); ! 210: ! 211: if ( msgfno < 0 ) { ! 212: d51 1 ! 213: a51 2 ! 214: parm[2] = key >> 16; ! 215: parm[3] = msgflg; ! 216: d53 1 ! 217: a53 1 ! 218: ioctl( msgfno, MSGGET, parm ); ! 219: d60 2 ! 220: a61 8 ! 221: ! 222: msgsnd( msqid, msgp, msgsz, msgflg ) ! 223: ! 224: int msqid; ! 225: struct msgbuf *msgp; ! 226: int msgsz; ! 227: int msgflg; ! 228: ! 229: d65 1 ! 230: a65 1 ! 231: if ( msgfno < 0 ) { ! 232: d76 1 ! 233: a76 1 ! 234: ioctl( msgfno, MSGSND, parm ); ! 235: d83 2 ! 236: a84 9 ! 237: ! 238: msgrcv( msqid, msgp, msgsz, msgtyp, msgflg ) ! 239: ! 240: int msqid; ! 241: struct msgbuf *msgp; ! 242: int msgsz; ! 243: long msgtyp; ! 244: int msgflg; ! 245: ! 246: d88 1 ! 247: a88 1 ! 248: if ( msgfno < 0 ) { ! 249: d101 1 ! 250: a101 1 ! 251: ioctl( msgfno, MSGRCV, parm ); ! 252: d104 2 ! 253: @
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.