消息队列实验用C语言实现两个终端的信息交互,在一个终端中输入,信息可以实时显示到另一个中端
时间: 2024-10-15 14:11:16 浏览: 2
在C语言中实现消息队列用于两个终端之间的信息交互,通常可以使用系统提供的管道(pipe)或者FIFO(文件名管道)机制。以下是简单的步骤:
1. 创建FIFO(命名管道):首先,创建一个特殊类型的文件,它是一个无名的半双工通信通道。在其中一个终端(生产者),使用`mkfifo`函数创建FIFO。
```c
#include <fcntl.h>
#include <unistd.h>
int pipefd[2];
if (mkfifo(pipefd[0], 0666) != 0) {
perror("Failed to create FIFO");
}
```
2. 编写生产者程序:该程序负责向管道中写入数据。使用`write()`函数将用户输入的消息发送到管道。
```c
int producer(int fd, const char* message) {
ssize_t bytes_written = write(fd, message, strlen(message) + 1); // 加一是因为需要写入换行符
if (bytes_written <= 0) {
perror("Writing to FIFO failed");
}
}
```
3. 编写消费者程序:此程序监听管道,并从其中读取信息。使用`read()`函数读取并打印接收到的数据。
```c
int consumer(int fd) {
char buffer[1024]; // 根据实际需求调整大小
ssize_t bytes_read;
while ((bytes_read = read(fd, buffer, sizeof(buffer))) > 0) {
buffer[bytes_read] = '\0'; // 结束字符串
printf("Received: %s\n", buffer);
}
if (bytes_read == 0) { // EOF标志
printf("No more data from the pipe.\n");
} else if (bytes_read < 0) {
perror("Reading from FIFO failed");
}
}
```
4. 在两个终端分别运行:一个终端作为生产者,输入消息;另一个终端作为消费者,接收并显示消息。
```bash
./producer < input.txt & // 生产者进程后台运行
./consumer & // 消费者进程后台运行
```