windows下python与c++之间使用共享内存通信,python为服务器,c++为客户端。代码示例
时间: 2023-06-26 22:07:20 浏览: 135
使用Windows共享内存技术 实现Python与C_C++程序间的数据传递.zip
5星 · 资源好评率100%
以下是一个简单的示例,其中Python作为服务器,C ++作为客户端,使用共享内存进行通信。
Python服务器端代码:
```python
import mmap
import os
import time
# 为共享内存分配空间
with open("test_shm", "wb") as f:
f.write(b'\x00' * mmap.PAGESIZE)
# 映射共享内存到Python进程
with open("test_shm", "r+b") as f:
shm = mmap.mmap(f.fileno(), 0)
# 向共享内存写入数据
msg = b"Hello from Python"
shm.seek(0)
shm.write(msg)
# 等待C++读取数据
time.sleep(1)
# 从共享内存读取C++写入的数据
shm.seek(0)
data = shm.read(len(msg))
print(f"Received message: {data.decode('utf-8')}")
# 解除共享内存映射
shm.close()
os.remove("test_shm")
```
C++客户端代码:
```cpp
#include <iostream>
#include <cstring>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
// 打开共享内存
int fd = open("test_shm", O_RDWR, 0666);
if (fd == -1) {
std::cerr << "Failed to open shared memory." << std::endl;
return 1;
}
// 映射共享内存到C++进程
void* ptr = mmap(nullptr, sizeof(char) * 20, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (ptr == MAP_FAILED) {
std::cerr << "Failed to map shared memory." << std::endl;
return 1;
}
// 从共享内存中读取数据
std::memcpy(static_cast<char*>(ptr), "Hello from C++", sizeof("Hello from C++"));
std::cout << static_cast<char*>(ptr) << std::endl;
// 解除共享内存映射
munmap(ptr, sizeof(char) * 20);
close(fd);
return 0;
}
```
这个示例中,我们首先在Python中创建了一个共享内存区域,并将其映射到Python进程。然后我们将一条消息写入共享内存。接着,我们在C++中打开相同的共享内存,并将其映射到C++进程。最后,我们读取共享内存中的数据,打印出来并解除共享内存映射。
阅读全文