---@meta spawn.posix

--------------------------------------------------------------------------------
-- spawn.posix C 模块
--------------------------------------------------------------------------------

---@class spawn_posix_sigset*
local spawn_posix_sigset = {}

---@class spawn_posix_attr_flags*
---@field resetids? boolean
---@field setpgroup? boolean
---@field setsigdef? boolean
---@field setsigmask? boolean
---@field setsid? boolean
---@field cloexec_default? boolean
---@field setexec? boolean
---@field start_suspended? boolean
---@field setscheduler? boolean
---@field setschedparam? boolean
---@field usevfork? boolean

---@class spawn_posix_open_flags*
---@field rdwr? boolean
---@field wronly? boolean
---@field rdonly? boolean
---@field append? boolean
---@field creat? boolean
---@field excl? boolean
---@field noctty? boolean
---@field nonblock? boolean
---@field trunc? boolean
---@field sync? boolean
---@field dsync? boolean
---@field rsync? boolean
---@field async? boolean
---@field cloexec? boolean
---@field direct? boolean
---@field directory? boolean
---@field largefile? boolean
---@field ndelay? boolean
---@field noatime? boolean
---@field nofollow? boolean
---@field path? boolean
---@field tmpfile? boolean

---@class spawn_posix_attr*
local spawn_posix_attr = {}

--- 获取默认信号集合。
---@param set? spawn_posix_sigset* 复用 sigset
---@return spawn_posix_sigset*? set 信号集合
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:getsigdefault(set) end

--- 设置默认信号集合。
---@param set spawn_posix_sigset* 信号集合
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:setsigdefault(set) end

--- 获取信号 mask。
---@param set? spawn_posix_sigset* 复用 sigset
---@return spawn_posix_sigset*? set 信号集合
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:getsigmask(set) end

--- 设置信号 mask。
---@param set spawn_posix_sigset* 信号集合
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:setsigmask(set) end

--- 获取 spawn flags。
---@return spawn_posix_attr_flags*? flags flags 表
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:getflags() end

--- 设置 spawn flags。
---@param flags spawn_posix_attr_flags* flags 表
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:setflags(flags) end

--- 获取进程组。
---@return integer? pgroup 进程组
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:getpgroup() end

--- 设置进程组。
---@param pgroup integer 进程组
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:setpgroup(pgroup) end

--- 获取调度策略。
---@return integer? policy 调度策略
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:getschedpolicy() end

--- 设置调度策略。
---@param policy integer 调度策略
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_attr:setschedpolicy(policy) end

---@class spawn_posix_file_actions*
local spawn_posix_file_actions = {}

--- 添加 open 文件动作。
---@param fd integer 目标 fd
---@param path string 文件路径
---@param oflag integer|spawn_posix_open_flags* open flags 或 flags 表
---@param mode? integer 文件 mode
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_file_actions:addopen(fd, path, oflag, mode) end

--- 添加 close 文件动作。
---@param fd integer fd
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_file_actions:addclose(fd) end

--- 添加 dup2 文件动作。
---@param fd integer 源 fd
---@param newfd integer 目标 fd
---@return boolean? ok 成功时为 true
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function spawn_posix_file_actions:adddup2(fd, newfd) end

---@class spawn_posix*
---@type spawn_posix*
local M = {}

--- 调用 `posix_spawn`。
---@param path string 程序路径
---@param fileActions? spawn_posix_file_actions* 文件动作
---@param attr? spawn_posix_attr* spawn 属性
---@param argv string[] 参数数组
---@param envp? string[] 环境变量数组；不传则继承当前环境
---@return integer? pid 子进程 pid
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function M.spawn(path, fileActions, attr, argv, envp) end

--- 调用 `posix_spawnp`，按 PATH 查找程序。
---@param file string 程序名
---@param fileActions? spawn_posix_file_actions* 文件动作
---@param attr? spawn_posix_attr* spawn 属性
---@param argv string[] 参数数组
---@param envp? string[] 环境变量数组；不传则继承当前环境
---@return integer? pid 子进程 pid
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function M.spawnp(file, fileActions, attr, argv, envp) end

--- 创建 spawn 属性对象。
---@return spawn_posix_attr*? attr 属性对象
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function M.new_attr() end

--- 创建 spawn 文件动作对象。
---@return spawn_posix_file_actions*? fileActions 文件动作对象
---@return string? errMsg 错误信息
---@return integer? errno 错误码
function M.new_file_actions() end

return M
