1144e57fcSGui Andrade // RUN: %clang -O1 %s -o %t && %run %t
205d79295SGui Andrade // UNSUPPORTED: android
3144e57fcSGui Andrade #include <assert.h>
4144e57fcSGui Andrade #include <errno.h>
5144e57fcSGui Andrade #include <stdio.h>
6144e57fcSGui Andrade #include <string.h>
7144e57fcSGui Andrade #include <sys/msg.h>
8144e57fcSGui Andrade 
9144e57fcSGui Andrade #define CHECK_STRING "hello, world!"
10144e57fcSGui Andrade #define MSG_BUFLEN 0x100
11144e57fcSGui Andrade 
main()12144e57fcSGui Andrade int main() {
13144e57fcSGui Andrade   int msgq = msgget(IPC_PRIVATE, 0666);
144c23cf3cSMatt Morehouse   if (msgq == -1) perror("msgget:");
15144e57fcSGui Andrade   assert(msgq != -1);
16144e57fcSGui Andrade 
17144e57fcSGui Andrade   struct msg_s {
18144e57fcSGui Andrade     long mtype;
19144e57fcSGui Andrade     char string[MSG_BUFLEN];
20144e57fcSGui Andrade   };
21144e57fcSGui Andrade 
22144e57fcSGui Andrade   struct msg_s msg = {
23144e57fcSGui Andrade       .mtype = 1};
24144e57fcSGui Andrade   strcpy(msg.string, CHECK_STRING);
25144e57fcSGui Andrade   int res = msgsnd(msgq, &msg, MSG_BUFLEN, IPC_NOWAIT);
26144e57fcSGui Andrade   if (res) {
27144e57fcSGui Andrade     fprintf(stderr, "Error sending message! %s\n", strerror(errno));
28*cabe31f4SFangrui Song     msgctl(msgq, IPC_RMID, NULL);
29144e57fcSGui Andrade     return -1;
30144e57fcSGui Andrade   }
31144e57fcSGui Andrade 
32144e57fcSGui Andrade   struct msg_s rcv_msg;
33144e57fcSGui Andrade   ssize_t len = msgrcv(msgq, &rcv_msg, MSG_BUFLEN, msg.mtype, IPC_NOWAIT);
34144e57fcSGui Andrade   assert(len == MSG_BUFLEN);
35144e57fcSGui Andrade   assert(msg.mtype == rcv_msg.mtype);
36144e57fcSGui Andrade   assert(!memcmp(msg.string, rcv_msg.string, MSG_BUFLEN));
37f1746be6SNemanja Ivanovic   msgctl(msgq, IPC_RMID, NULL);
38144e57fcSGui Andrade   return 0;
39144e57fcSGui Andrade }
40