2 回答

TA貢獻1883條經驗 獲得超3個贊
這是一些開箱即用的示例代碼!:test_mmap.py
import os, ctypes, posix_ipc, sys, mmap
from subprocess import call
SHARED_MEMORY_NAME = "/shared_memory"
memory = posix_ipc.SharedMemory(SHARED_MEMORY_NAME, posix_ipc.O_CREX,
size=1024)
mapFile = mmap.mmap(memory.fd, memory.size)
memory.close_fd()
mapFile.seek(0)
mapFile.write("Hello world!\n".encode('utf-8'))
mapFile.seek(0)
print("FROM PYTHON MAIN PROCESS: ", mapFile.readline().decode('utf-8'))
mapFile.seek(0)
call([
"node", "./test_mmap.js", SHARED_MEMORY_NAME
])
mapFile.close()
posix_ipc.unlink_shared_memory(SHARED_MEMORY_NAME)
test_mmap.js
const args = process.argv;
const mmap = require('mmap.js');
const shm = require('nodeshm');
const SHM_FILE_NAME=args[args.length-1];
let fd = shm.shm_open(SHM_FILE_NAME, shm.O_RDWR, 0600);
if (fd == -1){
console.log("FD COULD NOT BE OPENED!");
throw "here";
}
let mm = mmap.alloc(1024, mmap.PROT_READ | mmap.PROT_WRITE, mmap.MAP_SHARED, fd, 0);
console.log("FROM NODE: ", mm.slice(0, mm.indexOf('\n')).toString('utf-8'));
示例輸出:
FROM PYTHON MAIN PROCESS: Hello world!
FROM NODE: Hello world!

TA貢獻1946條經驗 獲得超3個贊
幸運的是,這不起作用:想象一下,如果所有系統的MAP_ANONYMOUS
映射都針對同一區域并不斷相互覆蓋,那將是多么混亂。
相反,使用shm_open
創建一個新句柄,您可以在兩個進程中進行 mmap。這是一個可移植的包裝器,圍繞同樣有效但可移植性較差的策略創建和映射/dev/shm/
.
添加回答
舉報