在基于Linux的系统上,如何在交流程序中使用mqueue?

如何在基于Linux的系统上的ac程序中使用mqueue(消息队列)?

我正在寻找一些好的代码示例,这些示例可以显示如何以正确和适当的方式(可能是方法)来完成此操作。

回答:

下面是一个简单的服务器示例,该服务器从客户端接收消息,直到接收到“ exit”消息告诉其停止为止。

的代码:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <errno.h>

#include <mqueue.h>

#include "common.h"

int main(int argc, char **argv)

{

mqd_t mq;

struct mq_attr attr;

char buffer[MAX_SIZE + 1];

int must_stop = 0;

/* initialize the queue attributes */

attr.mq_flags = 0;

attr.mq_maxmsg = 10;

attr.mq_msgsize = MAX_SIZE;

attr.mq_curmsgs = 0;

/* create the message queue */

mq = mq_open(QUEUE_NAME, O_CREAT | O_RDONLY, 0644, &attr);

CHECK((mqd_t)-1 != mq);

do {

ssize_t bytes_read;

/* receive the message */

bytes_read = mq_receive(mq, buffer, MAX_SIZE, NULL);

CHECK(bytes_read >= 0);

buffer[bytes_read] = '\0';

if (! strncmp(buffer, MSG_STOP, strlen(MSG_STOP)))

{

must_stop = 1;

}

else

{

printf("Received: %s\n", buffer);

}

} while (!must_stop);

/* cleanup */

CHECK((mqd_t)-1 != mq_close(mq));

CHECK((mqd_t)-1 != mq_unlink(QUEUE_NAME));

return 0;

}

代码:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <mqueue.h>

#include "common.h"

int main(int argc, char **argv)

{

mqd_t mq;

char buffer[MAX_SIZE];

/* open the mail queue */

mq = mq_open(QUEUE_NAME, O_WRONLY);

CHECK((mqd_t)-1 != mq);

printf("Send to server (enter \"exit\" to stop it):\n");

do {

printf("> ");

fflush(stdout);

memset(buffer, 0, MAX_SIZE);

fgets(buffer, MAX_SIZE, stdin);

/* send the message */

CHECK(0 <= mq_send(mq, buffer, MAX_SIZE, 0));

} while (strncmp(buffer, MSG_STOP, strlen(MSG_STOP)));

/* cleanup */

CHECK((mqd_t)-1 != mq_close(mq));

return 0;

}

在 头:

#ifndef COMMON_H_

#define COMMON_H_

#define QUEUE_NAME "/test_queue"

#define MAX_SIZE 1024

#define MSG_STOP "exit"

#define CHECK(x) \

do { \

if (!(x)) { \

fprintf(stderr, "%s:%d: ", __func__, __LINE__); \

perror(#x); \

exit(-1); \

} \

} while (0) \

#endif /* #ifndef COMMON_H_ */

gcc -o server server.c -lrt

gcc -o client client.c -lrt

以上是 在基于Linux的系统上,如何在交流程序中使用mqueue? 的全部内容, 来源链接: utcz.com/qa/409769.html

回到顶部