使用消息缓冲队列实现client进程与server进程之间的通信,给出代码
时间: 2024-05-04 15:16:31 浏览: 109
利用消息队列实现进程间通信
好的,我知道了。关于使用消息缓冲队列实现client进程与server进程之间的通信,下面是示例代码:
Server进程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
#define MSG_SIZE 50
#define QUEUE_PERM 0660
#define QUEUE_NAME "/my_queue"
int main()
{
struct mq_attr queue_attr;
queue_attr.mq_flags = 0;
queue_attr.mq_maxmsg = 10;
queue_attr.mq_msgsize = MSG_SIZE;
mqd_t mqd = mq_open(QUEUE_NAME, O_CREAT | O_RDWR, QUEUE_PERM, &queue_attr);
if (mqd == -1) {
perror("mq_open");
exit(1);
}
while(1) {
char buff[MSG_SIZE];
int num_read = mq_receive(mqd, buff, sizeof buff, NULL);
if (num_read == -1) {
perror("mq_receive");
exit(1);
}
printf("Server received: %s\n", buff);
}
mq_close(mqd);
mq_unlink(QUEUE_NAME);
return 0;
}
```
Client进程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
#define QUEUE_NAME "/my_queue"
#define QUEUE_PERM 0
int main()
{
mqd_t mqd = mq_open(QUEUE_NAME, O_WRONLY, QUEUE_PERM);
if (mqd == -1) {
perror("mq_open");
exit(1);
}
for (int i = 1; i <= 5; i++) {
char buff[50];
sprintf(buff, "Hello, Server! This is message %d.\n", i);
int res = mq_send(mqd, buff, sizeof buff, 0);
if (res == -1) {
perror("mq_send");
exit(1);
}
printf("Client sent: %s", buff);
}
mq_close(mqd);
return 0;
}
```
以上就是一个简单的使用消息缓冲队列实现client进程与server进程之间通信的示例。需要注意的是,如果在使用前没有创建过该队列,则需要在server端先以创建队列的方式打开队列;如果消息队列已存在,则可以使用mq_open函数中的标志参数O_EXCL来检查队列是否存在,进而判断是否需要创建队列。
阅读全文