|
|
1.1 root 1: /*
2: * libc/sys/msgop.c
3: * User Message Functions.
4: * Note: msgget() must be first function called.
5: */
6:
7: #include <sys/msg.h>
8: #include <errno.h>
9:
10: static int msgfno = -1;
11: static char msgdev[] = "/dev/msg";
12:
13: /*
14: * Message Control Operations.
15: */
16: msgctl(msqid, cmd, buf) int msqid, cmd; struct msqid_ds * buf;
17: {
18: int parm[4];
19:
20: if (msgfno < 0) {
21: errno = ENODEV;
22: return -1;
23: }
24:
25: parm[0] = -1;
26: parm[1] = msqid;
27: parm[2] = cmd;
28: parm[3] = (int) buf;
29:
30: ioctl(msgfno, MSGCTL, parm);
31: return parm[0];
32: }
33:
34: /*
35: * Get Message Queue.
36: */
37: msgget(key, msgflg) key_t key; int msgflg;
38: {
39: int parm[4];
40:
41: if (msgfno < 0) {
42: if ((msgfno = open(msgdev, 0)) < 0) {
43: perror(msgdev);
44: errno = ENODEV;
45: return -1;
46: }
47: }
48:
49: parm[0] = -1;
50: parm[1] = key;
51: parm[2] = key >> 16;
52: parm[3] = msgflg;
53:
54: ioctl(msgfno, MSGGET, parm);
55: return parm[0];
56: }
57:
58: /*
59: * Send Message.
60: */
61: msgsnd(msqid, msgp, msgsz, msgflg) int msqid; struct msgbuf *msgp; int msgsz, msgflg;
62: {
63: int parm[5];
64:
65: if (msgfno < 0) {
66: errno = ENODEV;
67: return -1;
68: }
69:
70: parm[0] = -1;
71: parm[1] = msqid;
72: parm[2] = (int) msgp;
73: parm[3] = msgsz;
74: parm[4] = msgflg;
75:
76: ioctl(msgfno, MSGSND, parm);
77: return parm[0];
78: }
79:
80: /*
81: * Receive Message.
82: */
83: msgrcv(msqid, msgp, msgsz, msgtyp, msgflg)
84: int msqid; struct msgbuf *msgp; int msgsz; long msgtyp; int msgflg;
85: {
86: int parm[7];
87:
88: if (msgfno < 0) {
89: errno = ENODEV;
90: return -1;
91: }
92:
93: parm[0] = -1;
94: parm[1] = msqid;
95: parm[2] = (int) msgp;
96: parm[3] = msgsz;
97: parm[4] = (int) msgtyp;
98: parm[5] = (int) (msgtyp >> 16);
99: parm[6] = msgflg;
100:
101: ioctl(msgfno, MSGRCV, parm);
102: return parm[0];
103: }
104:
105: /* end of msgop.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.