直至正文
豫言包府
← 众包

豫言操作系统底层句柄 0.1.0

豫言 · 库

豫言操作系统底层接口之句柄:句柄的读写、寻址、同步、等待与管道;文件、套接字、终端、进程共用的部分。

豫言操作系统底层句柄〇点一点〇

状:草案。汉语本见汉语版。通用之规,见[调用约定](../调用约定.文言.md);状态之码表,见[底层基础](../底层基础/规范.文言.md)。

范围

柄之通用操作:读、写、定位读写、寻址、同步、设长度、设非阻塞、等待、建管道,及枚举初始授权与询类别。文件、套接字、终端、进程之柄,皆用此中函数以收发数据;其打开、连接、启动之函数,则在各自之包。本包依底层基础(状态之码)。

柄之模

  • 柄乃非负整数,平台颁之;零、一、二恒为标准入、出、误;负一为无效;既闭,其号或复用。
  • 初始柄表:启动时平台所授之余柄(预开之目录等),以 取初始句柄 按序号(自零起)枚举,每项给类别、柄与名(预开目录之名,乃客体所见之路径,如 /)。此为程序得授权之唯一来源。
  • 类别(取句柄类别):0 未知、1 普通文件、2 目录、3 终端、4 他字符设备、5 管道、6 套接字、7 进程。
  • 诸函数遇不适之类别则返 28(参数无效):如对目录 读,对管道 寻址(返 70,不可寻址)。

句柄(句柄。接口。豫)

| 函数 | 参 | 用 | | --- | --- | --- | | 取初始句柄 | 序号, 类别出, 句柄出, 名缓冲址, 名缓冲长, 名总长出 | 出类别、柄各四字节;名书于名缓冲,名之总长四字节;序号越界返 44;名缓冲不足返 61 | | 取句柄类别 | 句柄, 出 | 类别四字节 | | 读 | 句柄, 缓冲址, 长, 出 | 至多读「长」字节;已读之数四字节,零为文件尾;非阻塞之柄无数据返 6;终端行模按行送达,换行符亦在所读字节中,空行故至少得一字节;缓冲短于一行则余字待后读;长为零则不耗输入 | | 写 | 句柄, 址, 长, 出 | 已写之数四字节,可短写;读端已闭之管道返 64 | | 定位读 | 句柄, 缓冲址, 长, 偏移低, 偏移高, 出 | 不易当前之位;不可寻址之柄返 70 | | 定位写 | 句柄, 址, 长, 偏移低, 偏移高, 出 | 同上 | | 寻址 | 句柄, 偏移低, 偏移高, 起点, 出 | 起点 0 始、1 今、2 末;新位八字节;不可寻址返 70 | | 关闭 | 句柄 | 其后此号失效 | | 同步 | 句柄, 标志 | 标志 1 谓仅同步数据;不可同步之柄返 28 | | 设长度 | 句柄, 低, 高 | 截或扩普通文件;余类返 28 | | 设非阻塞 | 句柄, 开关 | 开关 1 置为非阻塞,0 复其阻塞 | | 建管道 | 读端出, 写端出 | 二端各得一柄(各四字节);诸写端皆闭,则读端读得 0 |

等待(等待。接口。豫)

| 函数 | 参 | 用 | | --- | --- | --- | | 等待 | 订阅址, 订阅数, 事件址, 出 | 阻塞至少有一事;事书于事件址,事之个数(四字节)书于出址;订阅数为零则返 28 |

订(十六字节):

| 偏移 | 宽 | 字段 | | --- | --- | --- | | 0 | 4 | 类别:1 钟、2 可读、3 可写 | | 4 | 4 | 柄(钟类略之) | | 8 | 8 | 超时纳秒(唯钟类,相对当前之刻) |

事(十六字节):

| 偏移 | 宽 | 字段 | | --- | --- | --- | | 0 | 4 | 订之序号,即其于数组中之下标 | | 4 | 4 | 状态之码:零,或其柄出误之码(如 8) | | 8 | 4 | 类别,同订 | | 12 | 4 | 可用之字节数(可读类,逾三十二位则取其极;余为零) |

规:钟订至时即报;可读之订,柄有数据或已至文件尾(是时可用之字节数为零)则报;可写之订,写而不阻则报;无钟订而无柄就绪,则久阻。无柄之订而唯有钟订,即睡眠。首版保四类之物可候:文件(恒就绪)、终端、管道、套接字与进程(进程可读即已退)。

平台之注

  • 裸机:零、一、二为控制台;管道乃执行器内之内存物;候钟用内核滴答(精度十毫秒),候邮箱与终端之入,靠内核服务之轮询;文件之柄,由执行器内之文件系统供之(见[底层文件](../底层文件/规范.文言.md))。
  • 桌面:柄乃文件描述符(Linux、macOS)或 HANDLE(Windows)之上一层编号;等待 落于 ppoll、kevent 或 WaitForMultipleObjects,此诸后端中最难齐一之处,首版唯承上述四类之物。

所赖

观包之制

上传之记

今修订:1 ·

  1. 修订 1
    取 ZIP

包之层级

父:豫言操作系统底层接口

无子包。