A comprehensive, direct binding of C standard I/O to Moonbit.
It follows the C standard's resource handling rules to align with C logic.
There is NO garbage collection (GC) in this FFI binding.
All file streams require manual release!
本模块是 C 标准库 stdio 的完整 Moonbit FFI 绑定。
为了最大程度地与 C 逻辑保持一致,采用 I/O 标准本身的资源释放规则。
此 FFI Binding 没有垃圾回收。
所有文件流都需要手动释放!!!
fopen/fclose/freopen- 打开 / 关闭 / 重新打开文件remove/rename- 删除 / 重命名文件tmpfile/tmpnam- 临时文件操作
printf_bytes/printf_string- 安全格式化输出到标准输出unsafe_printf_1-16- 支持最多 16 个参数的 printf 变体fprintf_0-8- 格式化输出到文件流sprintf_1-8- 格式化输出到字符串snprintf_1-8- 安全边界格式化输出到字符串scanf_1-8/fscanf_1-8/sscanf_1-8- 格式化输入
fgetc/getc/getchar- 字符读取fputc/putc/putchar- 字符写入ungetc- 字符回退
fgets/fputs/puts- 行读写
fread/fwrite- 块读写
fseek/ftell/rewind- 文件定位fgetpos/fsetpos- 文件位置记录
fflush- 刷新缓冲区setbuf/setvbuf- 缓冲控制
feof/ferror/clearerr- 状态检查与清除perror- 错误信息输出
seek_set()/seek_cur()/seek_end()- 定位模式常量eof()/isEOF()- 文件结束标志iofbf()/iolbf()/ionbf()- 缓冲模式常量bufsize()/fopen_max()/filename_max()/tmpnam_max()/tmp_max()- 系统常量null()/isNULL()- 空指针检查stdin()/stdout()/stderr()- 标准流make_buf()- 分配 FFI 用字节缓冲区
// 打开文件,写入后关闭
let fd = fopen(b"hello.txt\x00", b"w\x00")
let msg = b"Hello, Moonbit!\x00"
let _ = fwrite(msg, 1, msg.length(), fd)
let _ = fclose(fd)
// 读取文件
let fd2 = fopen(b"hello.txt\x00", b"r\x00")
let buf = make_buf(64)
let n = fread(buf, 1, 64, fd2)
let _ = fclose(fd2)- 所有文件流必须手动调用
fclose关闭,否则会造成资源泄漏 scanf系列函数需要预先分配足够大的Bytes缓冲区作为输出参数- 格式化字符串必须以
\x00结尾
Apache-2.0