linux 使用命名管道作为两个进程间传输消息实例代码
时间: 2024-01-24 19:03:36 浏览: 29
下面是一个简单的使用命名管道作为两个进程间传输消息的示例代码:
发送方代码:
```bash
#!/bin/bash
FIFO_FILE=myfifo
# 创建 FIFO 管道
if [ ! -e $FIFO_FILE ]; then
mkfifo $FIFO_FILE
fi
# 向 FIFO 管道中发送消息
echo "Hello World" > $FIFO_FILE
# 删除 FIFO 管道
rm $FIFO_FILE
```
接收方代码:
```bash
#!/bin/bash
FIFO_FILE=myfifo
# 创建 FIFO 管道
if [ ! -e $FIFO_FILE ]; then
mkfifo $FIFO_FILE
fi
# 从 FIFO 管道中读取消息
cat $FIFO_FILE
# 删除 FIFO 管道
rm $FIFO_FILE
```
这里的示例代码中,发送方使用 `echo` 命令将消息发送到 FIFO 管道中,接收方使用 `cat` 命令从 FIFO 管道中读取消息。需要注意的是,发送方和接收方都需要先创建 FIFO 管道,然后再进行消息的发送和接收。在完成消息传输后,需要将 FIFO 管道删除,以释放相关资源。
相关问题
linux环境 使用命名管道作为两个进程间传输消息实例代码
下面是一个简单的使用命名管道作为两个进程间传输消息的示例代码:
发送方代码:
```c
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#define FIFO_FILE "/tmp/myfifo"
int main()
{
int fd;
char *message = "Hello World\n";
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
// 创建 FIFO 管道
mkfifo(FIFO_FILE, mode);
// 打开 FIFO 管道并向其中写入消息
fd = open(FIFO_FILE, O_WRONLY);
write(fd, message, strlen(message));
close(fd);
// 删除 FIFO 管道
unlink(FIFO_FILE);
return 0;
}
```
接收方代码:
```c
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#define FIFO_FILE "/tmp/myfifo"
int main()
{
int fd;
char message[100];
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
// 创建 FIFO 管道
mkfifo(FIFO_FILE, mode);
// 打开 FIFO 管道并从其中读取消息
fd = open(FIFO_FILE, O_RDONLY);
read(fd, message, sizeof(message));
printf("Received message: %s", message);
close(fd);
// 删除 FIFO 管道
unlink(FIFO_FILE);
return 0;
}
```
这里的示例代码中,发送方使用 `open` 和 `write` 函数向 FIFO 管道中写入消息,接收方使用 `open` 和 `read` 函数从 FIFO 管道中读取消息。需要注意的是,发送方和接收方都需要先创建 FIFO 管道,然后再进行消息的发送和接收。在完成消息传输后,需要将 FIFO 管道删除,以释放相关资源。
window c++ 两个进程之间如何通过命名管道传递消息实例
下面是一个简单的例子,演示了如何在两个进程之间使用命名管道传递消息。
首先,我们需要创建一个命名管道,代码如下:
```c++
HANDLE hPipe;
LPTSTR lpPipeName = TEXT("\\\\.\\pipe\\MyPipe");
hPipe = CreateNamedPipe(lpPipeName, PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
// 处理错误
}
```
在这个例子中,我们使用 `CreateNamedPipe` 函数创建了一个名为 `MyPipe` 的命名管道。管道的访问模式为双向访问,类型为消息型管道,读取模式为消息读取模式,等待模式为默认等待模式。管道的实例数量为无限制,输入缓冲区大小和输出缓冲区大小均为1024字节。
接下来,我们在一个进程中向管道中写入消息:
```c++
DWORD dwWritten;
char szMessage[] = "Hello, World!";
if (!ConnectNamedPipe(hPipe, NULL)) {
// 处理错误
}
if (!WriteFile(hPipe, szMessage, strlen(szMessage), &dwWritten, NULL)) {
// 处理错误
}
FlushFileBuffers(hPipe);
DisconnectNamedPipe(hPipe);
```
在这个例子中,我们使用 `ConnectNamedPipe` 函数等待客户端连接管道。一旦客户端连接上管道,我们通过 `WriteFile` 函数将消息写入管道。最后,我们使用 `FlushFileBuffers` 函数和 `DisconnectNamedPipe` 函数断开管道连接。
在另一个进程中,我们可以从管道中读取消息,代码如下:
```c++
HANDLE hPipe;
LPTSTR lpPipeName = TEXT("\\\\.\\pipe\\MyPipe");
hPipe = CreateFile(lpPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
// 处理错误
}
char szMessage[1024];
DWORD dwRead;
if (!ReadFile(hPipe, szMessage, sizeof(szMessage), &dwRead, NULL)) {
// 处理错误
}
printf("Received message: %s\n", szMessage);
CloseHandle(hPipe);
```
在这个例子中,我们使用 `CreateFile` 函数连接到名为 `MyPipe` 的命名管道。一旦连接成功,我们可以使用 `ReadFile` 函数从管道中读取消息。最后,我们通过 `printf` 函数打印出收到的消息,并关闭管道连接。
这就是一个简单的例子,演示了如何在两个进程之间使用命名管道传递消息。