mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
- docs/zh/架构迁移评估.md: C ABI→子进程+共享内存完整迁移论证(1621行) - docs/zh/experiments/: 18项可复跑可行性实验(架构评估的所有数字来源) - plan.md §11: 11.1~11.9 插件架构缺陷修复清单(唯一权威编号) - main 保持干净,本批次为 update 特性分支的整改起点
42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
//go:build ignore
|
||
package main
|
||
|
||
import (
|
||
"encoding/binary"
|
||
"fmt"
|
||
"os"
|
||
"unsafe"
|
||
|
||
"golang.org/x/sys/unix"
|
||
)
|
||
|
||
// 子进程:fd 3 = eventfd(通知), fd 4 = shm 文件
|
||
func main() {
|
||
efd := os.NewFile(3, "evt")
|
||
shmf := os.NewFile(4, "shm")
|
||
|
||
data, err := unix.Mmap(int(shmf.Fd()), 0, 4096, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
|
||
if err != nil { fmt.Println("CHILD mmap 失败:", err); os.Exit(1) }
|
||
fmt.Printf("CHILD: mmap 基址 = %p\n", unsafe.Pointer(&data[0]))
|
||
|
||
buf := make([]byte, 8)
|
||
if _, err := efd.Read(buf); err != nil {
|
||
fmt.Println("CHILD read err:", err); os.Exit(1)
|
||
}
|
||
n := binary.LittleEndian.Uint64(buf)
|
||
fmt.Printf("CHILD: 被 eventfd 唤醒, 计数=%d\n", n)
|
||
|
||
// 按偏移读:头部 16 字节 = {off uint32, len uint32, seq uint64}
|
||
off := binary.LittleEndian.Uint32(data[0:4])
|
||
ln := binary.LittleEndian.Uint32(data[4:8])
|
||
seq := binary.LittleEndian.Uint64(data[8:16])
|
||
payload := string(data[off : off+ln])
|
||
fmt.Printf("CHILD: 偏移解引用 off=%d len=%d seq=%d → %q\n", off, ln, seq, payload)
|
||
|
||
// 子进程回写(验证双向可见)
|
||
copy(data[2048:], []byte("CHILD-ACK"))
|
||
binary.LittleEndian.PutUint32(data[16:20], 2048)
|
||
binary.LittleEndian.PutUint32(data[20:24], uint32(len("CHILD-ACK")))
|
||
fmt.Println("CHILD: 已回写 ACK")
|
||
}
|