Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * server.c: Server program
- * to demonstrate interprocess commnuication
- * with POSIX message queues
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <mqueue.h>
- #define SERVER_QUEUE_NAME "/sp-example-server"
- #define QUEUE_PERMISSIONS 0660
- #define MAX_MESSAGES 10
- #define MAX_MSG_SIZE 256
- #define MSG_BUFFER_SIZE MAX_MSG_SIZE + 10
- int main (int argc, char **argv)
- {
- mqd_t qd_server, qd_client; // queue descriptors
- long token_number = 1; // next token to be given to client
- printf ("Server: Hello, World!\n");
- struct mq_attr attr;
- attr.mq_flags = 0;
- attr.mq_maxmsg = MAX_MESSAGES;
- attr.mq_msgsize = MAX_MSG_SIZE;
- attr.mq_curmsgs = 0;
- if ((qd_server = mq_open (SERVER_QUEUE_NAME, O_RDONLY | O_CREAT, QUEUE_PERMISSIONS, &attr)) == -1) {
- perror ("Server: mq_open (server)");
- exit (1);
- }
- char in_buffer [MSG_BUFFER_SIZE];
- char out_buffer [MSG_BUFFER_SIZE];
- while (1) {
- // get the oldest message with highest priority
- if (mq_receive (qd_server, in_buffer, MSG_BUFFER_SIZE, NULL) == -1) {
- perror ("Server: mq_receive");
- exit (1);
- }
- printf ("Server: message received: %s\n", in_buffer);
- // send reply message to client
- if ((qd_client = mq_open (in_buffer, O_WRONLY)) == 1) {
- perror ("Server: Not able to open client queue");
- continue;
- }
- sprintf (out_buffer, "%ld", token_number);
- if (mq_send (qd_client, out_buffer, strlen (out_buffer), 0) == -1) {
- perror ("Server: Not able to send message to client");
- continue;
- }
- printf ("Server: response sent to client.\n");
- token_number++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement