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