文件接口 Node 适配
路一 Node 宿主的[文件接口](../../../豫言操作系统接口/文件/规范.汉语.md)适配。目录权只来自启动时的宿主选项:--授权目录 名=路径(可读可写)或 --授权只读目录 名=路径;取得已授目录 按名称取目录权,未授权的名称返回 未获授权。
- 路径规则:
/分隔的相对路径;空串、以/开头、空段、.、..、零字节与无效 UTF-8 返回输入无效;Windows 上段内的\与:也返回输入无效(待办事项:是否在所有平台都拒绝,以求三平台完全一致)。 - 越界防护:宿主先求目标的真实路径,确认仍在授权目录内(符号链接指向目录外时返回
输入无效),再打开。求真实路径与打开之间仍有竞态,待办事项:逐段O_NOFOLLOW打开。 打开只读文件以只读打开,打开可写文件以只写打开已存在的文件,都不创建、不截断;目标不存在返回资源不存在,不是普通文件返回输入无效,只读目录上打开可写文件返回未获授权。读取文件读至多上限字节(单次不超过值桥交换上限 16 MiB);读到末尾返回文件读尽,上限为零返回空字节串,上限为负返回输入无效。写入文件返回实际写入字节数,空输入返回零,暂时写不进返回资源暂不可用。- 读写方向分离:只读柄写入、可写柄读取都返回
未获授权。关闭文件之后(无论成败)句柄失效,再用返回资源已失效;伪造的句柄号同样得到资源已失效。
新增宿主原语(外调名):豫言_节点_文件取得目录、豫言_节点_文件打开、豫言_节点_文件读取、豫言_节点_文件写入、豫言_节点_文件关闭,实现在 豫言操作系统/宿主/节点/应用宿主.mjs,返回(状态码,…):0 成功,1 至 7 依次对应未获授权、资源暂不可用、资源已失效、资源不存在、资源已存在、资源配额已尽、输入无效,8 为宿主操作失败(附消息),读取时 9 表示读尽。本适配依赖基础接口的 错误 模块,由节点模式的构建器一并绑定。