原生子区
公开化「有」而「整数」
文言:原生之子进程原语(四十三至四十六):解程序之径,书参数之块,经底层接口之运行程序起之,候其退。四十三、四十四承标准之流;四十五弃其出(接 /dev/null)而返退码为零否;四十六以二管捕其出与误,返三元组。汉语:原生系统(Linux、macOS)上的同步子进程原语 43–46:把程序名解析成绝对路径(含斜线的按当前目录规范化,否则在 PATH 里找),把程序名与参数写成参数块(各以零结尾),经底层接口的 运行程序 启动(环境继承本进程,工作目录是进程的真实目录,切换当前目录时已同步),再等它退出。43(继承标准流)与 44(传递输出,这里同样直接继承)返回退出码;45 把标准输出与标准错误接到 /dev/null,返回“退出码为零”;46 用两条管道捕获标准输出与标准错误(经 等待 同时读两条管道,免得一条写满而互相卡住),返回(退出码为零,标准输出,标准错误)。启动失败时 43、44 得 127,45 得假,46 得(假,空,空)。异步子进程(67–69)见本文件末尾。待办事项:设置子进程输入与环境(原语 70、71)尚未接到原生系统。
文言:子进程之区:暂存一九六六零八起六十四千字节:运行程序之块、槽、订与事、参数之串。汉语:子进程工作区(暂存 196608 起 64 KiB):+0 运行程序块(44 字节),+48 出槽,+56 与 +64 两对管道,+128 订阅(3×16),+192 事件(3×16),+256 事件数,+512 起参数串(至多 65024 字节)。
原生子区末
公开化「有」而「整数」
暂无说明。
原生书串
公开化「整数」而化「整数」而化「整数」而「整数」
文言:书一串并零终,逾界则不书;返新位,不书则返负一。汉语:把(址,长)写到 出 并补零,超过区末不写返回 -1,否则返回写后的位置。
原生书参们
公开化「整数」而化「整数」而化「整数」而化「整数」而「整数」
暂无说明。
原生起子
公开化「整数」而化「整数」而化「整数」而化「整数」而化「整数」而「整数」
文言:起子进程:成则返进程之柄,败则返负一。汉语:按程序名对象与参数对(元组,个数)启动子进程,三个标准流用给定句柄(-1 为继承);成功返回进程句柄,失败返回 -1。
原生候退
公开化「整数」而「整数」
文言:候子进程之退:未退则以候待其柄可读。汉语:等子进程退出并返回退出码:取不到(6)就用 等待 订阅进程句柄“可读”(即已退出)再取;最后关闭进程句柄。
原生读管块
公开化「整数」而化「整数」而「爻」
文言:读一管之块,书入捕获;返是否已尽。汉语:从管道读一块(至多 48 KiB,借目录缓冲)追加到捕获缓冲;读到 0 字节或出错说明写端已全关,返回阳。
原生并读
公开化「整数」而化「整数」而化「整数」而「有」
文言:并读二管至尽:以候同待,孰可读则读孰。汉语:同时读两条管道直到都读尽:每轮用 等待 订阅仍开着的管道,哪条可读就读哪条,读尽就关掉。开者是位掩码(1 标准输出管道,2 标准错误管道)。
原生空设备
公开化「有」而「整数」
文言:开 /dev/null 以写。汉语:以写方式打开 /dev/null(相对根目录句柄 3),失败返回 -1。
原生捕获运行
公开化「整数」而化「整数」而「整数」
文言:捕其出而运行:建二管,起子,并读,候退。汉语:捕获输出运行(原语 46):建两条管道,子进程的标准输出与标准错误接到写端,父进程关掉写端后同时读两条管道到尽头,再等子进程退出;返回退出码,启动失败返回 -1。
原生子进程原语
公开化「整数」而化「整数」而「整数」
暂无说明。
异步项址
公开化「整数」而「整数」
文言:原生之异步子进程(六十七至六十九):表于区域,千二十四项,项四十八字节:〇态(零空、一行、二毕),四进程之柄,八出管,十二误管(闭则负一),十六退码,二十已退,二十四至三十二出之捕获(引、长、容),三十六至四十四误之捕获。起之则建二管,子之二出接写端,父闭写端而设读端不塞;推之则尽读二管、询退码;收之则毕者交出结果而释其项;候之则推诸项,所关注者皆未毕,乃以底层之候并候诸管与诸进程(及时钟)。捕获之缓冲为堆中之字节数组,其引存于表,回收时整表为根。汉语:原生系统上的异步子进程原语 67–69。表在启动时用 取区域 分配(1024 项,每项 48 字节):+0 状态(0 空闲、1 运行、2 已完成),+4 进程句柄,+8 标准输出管道读端,+12 标准错误管道读端(关闭后为 -1),+16 退出码,+20 是否已退出,+24/+28/+32 标准输出捕获(引用、长度、容量),+36/+40/+44 标准错误捕获。启动:建两条管道,子进程的标准输出与标准错误接写端,标准输入继承;父进程关掉写端,读端设为不阻塞。推进:把两条管道里现有的数据读尽(读到尾就关闭),并查询退出码;已退出且两条管道都关闭即为完成。收取:完成的项交出(1,句柄号,退出码,标准输出,标准错误)并释放;未完成返回(0,0,0,空,空)。等待:推进所有运行中的项,所关注的都没完成时,用底层接口的 等待 同时等全部管道与进程句柄(有时限再加时钟订阅),醒来再推进。捕获缓冲是堆里的字节数组,引用存在表里,回收时整张表作为根扫描。待办事项:设置子进程输入与环境(70、71)在原生系统上尚未实现,返回 -1;等待的已过时间只用单调时钟的低 32 位纳秒计算,单次等待超过约 4.3 秒时时限会不准。
异步订阅区
公开化「有」而「整数」
暂无说明。
异步事件区
公开化「有」而「整数」
暂无说明。
原生异步初始化
公开化「有」而「有」
暂无说明。
异步追加
公开化「整数」而化「整数」而化「整数」而「有」
文言:捕获之追加:容不足则倍之(至少所需,始于二百五十六)。汉语:把(址,数)追加到某项的捕获缓冲(引址指向 引用、长度、容量 三个字);容量不够时扩到两倍或所需大小(取大者,最小 256)。
异步取串
公开化「整数」而「整数」
暂无说明。
异步读管
公开化「整数」而化「整数」而「爻」
文言:读一管至暂无或尽:尽则返阳。汉语:把管道里现有的数据读尽追加到捕获缓冲:暂无数据返回阴(管道仍开),读到尾或出错返回阳(应关闭)。
异步收管
公开化「整数」而化「整数」而「有」
文言:收一管:管在项之偏处,其捕获之记在偏之三倍(八者二十四,十二者三十六)。汉语:收取一条管道:管道句柄在项的 偏 处(8 为标准输出、12 为标准错误),对应捕获记录在 偏×3 处(24、36)。
异步推进
公开化「整数」而「有」
暂无说明。
异步推进全部
公开化「整数」而「有」
暂无说明。
异步寻空
公开化「整数」而「整数」
暂无说明。
异步号项
公开化「整数」而「整数」
文言:号转项:号为序加一;无效则返零。汉语:句柄号(序号加一)转表项地址;号无效或该项空闲返回 0。
原生启动异步
公开化「整数」而「整数」
暂无说明。
原生收取异步
公开化「整数」而「整数」
暂无说明。
异步写订阅
公开化「整数」而化「整数」而「整数」
文言:候之订阅:诸行项之开管与未退之进程,各一可读之订。返订阅之数。汉语:为所有运行中的项写等待订阅:每条仍开着的管道与尚未退出的进程各一个“可读”订阅;返回订阅个数。
异步算事件
公开化「整数」而化「整数」而化「整数」而化「整数」而「爻」
文言:诸关注之事:毕而关注可读者一,号无效者四,余零。汉语:计算每个关注项的事件:子进程已完成且关注“可读”为 1,句柄无效为 4,其余为 0;事件写入 事件们 元组,返回是否有非零事件。
异步候
公开化「整数」而化「整数」而化「整数」而化「整数」而「有」
文言:候至有事或逾时。起时之纳秒存于宽临时之四十八。汉语:循环:推进全部运行项,计算关注项事件;有非零事件或超时为 0 时返回;否则写订阅(有时限再加一个时钟订阅,时长为剩余时间),调用底层 等待 阻塞,醒来后重复。开始时间(纳秒,8 字节)存在 状态_宽临时 + 48。
原生多路等待
公开化「整数」而「整数」
暂无说明。