使用TinyGo将Golang编译为WASM。使用wasmtime执行。

3

我有以下测试代码

func main() {
    path, err := os.Getwd()
    log.Println(path, err)
    files, err := ioutil.ReadDir("/etc/dse")
    log.Println(files, err)
}

我使用编译成wasm

tinygo build -target wasi -o list.wasm list.go

然后我使用它执行

wasmtime list.wasm

输出结果为

2023/05/05 16:00:50 / <nil>
2023/05/05 16:00:50 [] open /etc/dse: errno 76

同时,目录 /etc/dse 存在且具有 777 权限。
这个错误的来源是什么,如何修复?
1个回答

1

errno 76 表示 capabilities insufficient,即权限不足。

您需要使用 wasmtime--dir 选项为其授予访问必需目录中文件的能力(请参见 wasmtime WASI tutorial):

--dir= 选项指示 wasmtime 预打开一个目录,并将其作为能力提供给程序,以便在该目录内打开文件。

$ wasmtime --dir=/etc/dse list.wasm
2023/05/06 01:36:31 / <nil>
2023/05/06 01:36:31 [] readdir unimplemented : errno 54

很遗憾,TinyGo尚未实现readdir函数。

参考资料:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接