SuperAPI AI 工具集

rust-system-calls

编程与开发

查看项目

更新于 10-16 03:14

技能介绍

用途:指导在 Rust 中改用 bun_sys 而非 std::fs 或原始 libc,实现跨平台系统调用与文件 I/O,并获得更完整的错误处理。

主要能力:bun_sys::File 是首选文件封装,持有 fd 并在 Drop 时关闭。示例:File::openat(Fd::cwd(), b"path/to/file", O::RDONLY, 0)?,配合 read_all 循环读到 EOF 或缓冲区满。还提供 open、read、write、pread、pwrite、stat、fstat、lstat、mkdir、unlink、rename、symlink、chmod 等基于 Fd 的自由函数,以及 O::RDONLY、O::WRONLY | O::CREAT | O::TRUNC 等打开标志。

错误处理:函数返回 Maybe<T>(即 Result<T, bun_sys::Error>),可用 ? 传播;错误携带 errno、syscall: Tag 和 path: Box<[u8]>,可按 errno 分支(如 bun_c::ENOENT)。转成 JS 异常用 bun_sys_jsc::ErrorJsc::to_js。相比 std::fs/libc,bun_sys 在 Windows 有完整支持与 libuv 回退,自动重试 EINTR,路径用 &[u8](WTF-8 安全)。

路径处理:用 bun_paths 做拼接与规范化,并用 path_buffer_pool::get() 避免 Windows 上 64 KB 栈分配。

常见错误:不要对可能因用户输入或系统原因失败的结果 .unwrap();不要用 std::fs::File,会丢失 syscall tag 与 path;热路径不要栈上分配 PathBuffer;File 存活时不要调用 file.fd().close(),避免双重关闭。完整参考见 src/CLAUDE.md。