Durable file operations for MoonBit: atomic write (fsync+rename), mkdir_p, append, chmod, rotation and flock
moon add chensuiyi/fsx| Function | Description |
|---|---|
| write_atomic(path, data) | Write .tmp → fsync → atomic rename; parent dir fsynced |
| mkdir_p(path, mode?) | Idempotent recursive mkdir |
| append_file(path, data) | Poll-bounded append |
| chmod(path, mode) | Tighten mode of an existing path |
| unlink(path) | Remove |
| file_size(path) | Size in bytes, None when missing |
| rotate(path) | Shift chain, rename to .1, drop .10 |
| copytruncate(path) | Copy to .1, truncate in place |
| lock_exclusive(path) | Non-blocking flock, returns fd |
| read_small(path, cap?) | Read to EOF, capped |
// Crash-safe state write
@fsx.mkdir_p("/var/lib/myapp")
@fsx.write_atomic("/var/lib/myapp/state.json", b"{\"pid\":42}")
// Singleton lock
let lock_fd = @fsx.lock_exclusive("/var/run/myapp.lock")
// /proc read
let cmdline = @fsx.read_small("/proc/self/cmdline")moon add chensuiyi/fsx| 函数 | 说明 |
|---|---|
| write_atomic(path, data) | 写 .tmp → fsync → 原子改名;父目录一并 fsync |
| mkdir_p(path, mode?) | 幂等递归建目录 |
| append_file(path, data) | poll 限时追加 |
| chmod(path, mode) | 收紧已有路径权限 |
| unlink(path) | 删除 |
| file_size(path) | 字节大小,不存在返回 None |
| rotate(path) | 链条平移,改名 .1,丢弃 .10 |
| copytruncate(path) | 复制到 .1,原地截断 |
| lock_exclusive(path) | 非阻塞 flock,返回 fd |
| read_small(path, cap?) | 读到 EOF,受 cap 限制 |
// 掉电安全的状态写入
@fsx.mkdir_p("/var/lib/myapp")
@fsx.write_atomic("/var/lib/myapp/state.json", b"{\"pid\":42}")
// 单实例锁
let lock_fd = @fsx.lock_exclusive("/var/run/myapp.lock")
// /proc 读取
let cmdline = @fsx.read_small("/proc/self/cmdline")pub(all) suberror FileError {
Failed(op~ : String, errno~ : Int)
}fn file_size(path : String) -> Int64?Install
Download zipDurable file operations for MoonBit: atomic write (fsync+rename), mkdir_p, append, chmod, rotation and flock