#wasi #module #process #io #wasmer #伪进程 #wasi-process

wasi-process2

一个将WASI模块作为伪进程运行的库

5个版本

0.3.6 2024年3月26日
0.3.5 2024年3月26日
0.3.4 2024年3月26日
0.3.3 2024年3月26日
0.3.2 2024年3月24日

#412 in 操作系统

Download history 423/week @ 2024-03-22 91/week @ 2024-03-29 8/week @ 2024-04-05

107 每月下载次数

MIT 许可证

21KB
497

一个将WASI模块作为伪进程运行的库。

use wasmer_wasi::{WasiEnv, WasiState, WasiVersion};
use wasi_process::WasiProcess;
let store = wasmer::Store::default();
let wasm = include_bytes!("../helloworld.wasm"); // just write(1, "Hello, World!\n", 14)
let module = wasmer::Module::new(&store, wasm)?;
let mut state = WasiState::new("progg");
wasi_process::add_stdio(&mut state);
state.args(&["foo", "bar"]);
let imports = wasmer_wasi::generate_import_object_from_env(
    &store,
    WasiEnv::new(state.build()?),
    wasmer_wasi::get_wasi_version(&module, false).unwrap_or(WasiVersion::Latest),
);
let instance = wasmer::Instance::new(&module, &imports)?;
let mut wasi = WasiProcess::new(&instance, wasi_process::MaxBufSize::default())?;
let mut stdout = wasi.stdout.take().unwrap();
wasi.spawn();
let mut out = String::new();
stdout.read_to_string(&mut out).await?;
assert_eq!(out, "Hello, World!\n");

依赖

~10–21MB
~290K SLoC