10个版本
| 0.1.6 | 2020年3月9日 |
|---|---|
| 0.1.5 | 2020年3月9日 |
| 0.0.3 | 2020年3月4日 |
#951 in WebAssembly
42 个月下载量
用于 wcurses
12KB
322 行
libw
这个库旨在成为wasi严格功能的更易于使用的人类封装。
- 仅使用
#[no_std] 和alloc来鼓励非膨胀的wasm二进制文件 - 不需要使用
wasm32-wasi编译rust(这样做会增加文件大小) - 高级操作独立于POSIX
- 是学习wasi如何工作的好方法!。
hello world
[package]
name = "my_app"
version = "0.0.1"
[lib]
crate-type = ["cdylib"]
[profile.release]
lto = true
[dependencies]
libw = "0"
#![no_std]
#[no_mangle]
pub fn _start() {
libw::print("hey!\n");
}
build:
@RUSTFLAGS='-C link-arg=-s' cargo build --target wasm32-unknown-unknown --release
@cp target/wasm32-unknown-unknown/release/wasp.wasm .
wasmer my_app.wasm
文件操作
wasi模块只能在其被明确允许访问的文件夹中工作。默认情况下,wasi有3个基本文件
- 0 - 应用程序文本输入流
- 1 - 应用程序文本输出流
- 2 - 应用程序错误文本输出流
您在启动时给予明确权限的文件将被分配文件描述符号。您必须手动指定目录来完成此操作。
在 libw 中,可以使用 accessible_directories() 获取可访问的目录列表。您必须指定一个以可访问路径之一为前缀的完整路径。
let path = "/foo/hello.txt";
let mut txt = libw::read_text(path);
txt.push_str("goodbye");
libw::write_text(path, txt);
wasmer my_app.wasm --dir=/foo
API
数据流
read_line- 读取输入字符直到按回车print- 打印字符println- 打印以换行符结尾的字符error- 打印错误
时间
current_time- 自Unix纪元以来的毫秒数unix_time- 自Unix纪元以来的秒数high_precision_time- 获取主机时钟的当前实时值
调度
exit- 停止当前进程sleep- 将线程的控制权yield n毫秒
环境
accessible_directories- 获取wasi模块可访问的目录向量environment_variables- 获取环境变量向量command_arguments- 获取命令行参数字符串向量
文件
read_text- 将文本文件读取到字符串中write_text- 从字符串写入文本文件read_bytes- 从文件读取所有字节write_bytes- 将所有字节写入文件is_readable- 该文件能否被读取is_writeable- 该文件能否被写入is_directory- 该文件是否是目录is_stream- 该文件是否是流
数学
random- 获取一个随机的 f32
许可证
本项目许可为以下任一
- Apache 许可证 2.0 版(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(《LICENSE-MIT》或https://open-source.org.cn/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您提交给 libw 的任何贡献,根据 Apache-2.0 许可证的定义,应作为上述双重许可,无需附加条款或条件。
依赖项
~1MB
~14K SLoC