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》或http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您提交给 libw
的任何贡献,根据 Apache-2.0 许可证的定义,应作为上述双重许可,无需附加条款或条件。
依赖项
~1MB
~14K SLoC