39 lines
948 B
C
39 lines
948 B
C
// RUN: %clang -O1 %s -o %t && %run %t
|
|
// UNSUPPORTED: android
|
|
#include <assert.h>
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <sys/msg.h>
|
|
|
|
#define CHECK_STRING "hello, world!"
|
|
#define MSG_BUFLEN 0x100
|
|
|
|
int main() {
|
|
int msgq = msgget(IPC_PRIVATE, 0666);
|
|
if (msgq == -1) perror("msgget:");
|
|
assert(msgq != -1);
|
|
|
|
struct msg_s {
|
|
long mtype;
|
|
char string[MSG_BUFLEN];
|
|
};
|
|
|
|
struct msg_s msg = {
|
|
.mtype = 1};
|
|
strcpy(msg.string, CHECK_STRING);
|
|
int res = msgsnd(msgq, &msg, MSG_BUFLEN, IPC_NOWAIT);
|
|
if (res) {
|
|
fprintf(stderr, "Error sending message! %s\n", strerror(errno));
|
|
msgctl(msgq, IPC_RMID, NULL);
|
|
return -1;
|
|
}
|
|
|
|
struct msg_s rcv_msg;
|
|
ssize_t len = msgrcv(msgq, &rcv_msg, MSG_BUFLEN, msg.mtype, IPC_NOWAIT);
|
|
assert(len == MSG_BUFLEN);
|
|
assert(msg.mtype == rcv_msg.mtype);
|
|
assert(!memcmp(msg.string, rcv_msg.string, MSG_BUFLEN));
|
|
msgctl(msgq, IPC_RMID, NULL);
|
|
return 0;
|
|
}
|