diff options
Diffstat (limited to 'reference/C/CONTRIB/OR_USING_C/11.4.c')
-rw-r--r-- | reference/C/CONTRIB/OR_USING_C/11.4.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/OR_USING_C/11.4.c b/reference/C/CONTRIB/OR_USING_C/11.4.c new file mode 100644 index 0000000..346e577 --- /dev/null +++ b/reference/C/CONTRIB/OR_USING_C/11.4.c @@ -0,0 +1,65 @@ +#include <sys/types.h> +#include <sys/ipc.h> +#include <sys/msg.h> +#include <stdio.h> + +#define MSGSZ 128 + +#ifdef NOT_USED +/* + * Declare the message structure. + */ +struct msgbuf { + long mtype; + char mtext[MSGSZ]; +}; +#endif /* NOT_USED */ + +main() +{ + int msqid; + key_t key; + struct msgbuf sbuf, rbuf; + + /* + * Get the message queue id for the + * "name" 1234, which was created by + * the server. + */ + key = 1234; + + if ((msqid = msgget(key, 0666)) < 0) { + perror("msgget"); + exit(1); + } + + /* + * We'll send message type 1, the server + * will send message type 2. + */ + sbuf.mtype = 1; + sprintf(sbuf.mtext, "Did you get this?"); + + /* + * Send a message. + */ + if (msgsnd(msqid, &sbuf, strlen(sbuf.mtext) + 1, 0) < 0) { + perror("msgsnd"); + exit(1); + } + + /* + * Receive an answer of message type 2. + */ + if (msgrcv(msqid, &rbuf, MSGSZ, 2, 0) < 0) { + perror("msgrcv"); + exit(1); + } + + /* + * Print the answer. + */ + printf("%s\n", rbuf.mtext); + exit(0); +} + |