#include "raw.h" #define _POSIX_C_SOURCE 200809L #include #include #include #include #include #include #include #include #include #include #include #include static const char nullstr[] = "Hello, World!"; int main() { printf("Create queue.\n"); ShmemqError shmemq_error; Shmemq shmemq = shmemq_new("/buffer1", false, &shmemq_error); assert(shmemq_error == SHMEMQ_ERROR_NONE); assert(shmemq != NULL); printf( "REPL commands:\n" " x - exit\n" " f - send finish message\n" " 1 - send 1 byte\n" " 0 - send null-terminated string\n" ); printf("REPL.\n"); for (;;) { const char chr = getchar(); if (chr == '\n') continue; if (chr == 'x') { printf("Command: exit.\n"); break; } const ShmemqFrame frame = shmemq_push_start(shmemq); struct Message *const message = (struct Message*)frame->data; switch (chr) { case 'f': { const size_t size = sizeof(*message); message->type = FINISH; shmemq_push_end(shmemq, size, &shmemq_error); if (shmemq_error != SHMEMQ_ERROR_NONE) goto finalize; } break; case '1': { const size_t size = sizeof(*message) + sizeof(unsigned char); *(unsigned char*)message->data = 123; message->type = ONEBYTE; shmemq_push_end(shmemq, size, &shmemq_error); if (shmemq_error != SHMEMQ_ERROR_NONE) goto finalize; } break; case '0': { const size_t size = sizeof(*message) + strlen(nullstr) + 1; strcpy((char*)message->data, nullstr); message->type = NULLSTR; shmemq_push_end(shmemq, size, &shmemq_error); if (shmemq_error != SHMEMQ_ERROR_NONE) goto finalize; } break; default: printf("Unknown command: '%c'\n", chr); } } finalize: if (shmemq_error != SHMEMQ_ERROR_NONE) { printf( "Error: %u (SHMEMQ_ERROR_%s).\n", shmemq_error, shmemq_error_str(shmemq_error) ); } printf("Destroy queue.\n"); SHMEMQ_DELETE(shmemq, NULL); return 0; }