---@meta posix

--------------------------------------------------------------------------------
-- POSIX 模块
--------------------------------------------------------------------------------

---@class posix_timeval*
---@field sec? integer 秒。
---@field usec? integer 微秒。
---@field tv_sec? integer 秒。
---@field tv_usec? integer 微秒。

---@class posix_pfd*
---@field pids integer[] 进程号列表。
---@field fd integer 文件描述符。

---@class posix*
---@field version string 版本信息。
---@field sys posix_sys* sys 子模块集合。
---@field ctype posix_ctype*
---@field dirent posix_dirent*
---@field errno posix_errno*
---@field fcntl posix_fcntl*
---@field fnmatch posix_fnmatch*
---@field glob posix_glob*
---@field grp posix_grp*
---@field libgen posix_libgen*
---@field poll posix_poll*
---@field pwd posix_pwd*
---@field sched posix_sched*
---@field signal posix_signal*
---@field stdio posix_stdio*
---@field stdlib posix_stdlib*
---@field syslog posix_syslog*
---@field termio posix_termio*
---@field time posix_time*
---@field unistd posix_unistd*
---@field utime posix_utime*
---@field WNOHANG integer
---@field WUNTRACED integer
---@field O_RDONLY integer
---@field O_WRONLY integer
---@field O_RDWR integer
---@field O_CREAT integer
---@field O_TRUNC integer
---@field STDIN_FILENO integer
---@field STDOUT_FILENO integer
---@field STDERR_FILENO integer
---@type posix*
local M = {}

M.version = nil
M.sys = nil

--- 检查当前用户对文件的访问权限。
---@param file string 文件路径。
---@param mode string|integer 访问模式。
---@return integer? ok 成功时为 0。
---@return string? errMsg 错误信息。
---@return integer? errno 错误码。
function M.euidaccess(file, mode) end

--- 在子进程中执行命令表或 Lua 函数并等待结束。
---@param task table|function 命令参数表或函数。
---@param ... any 传给任务的参数。
---@return integer? status 退出状态、信号码或 errno。
---@return string? reason 结束原因或错误信息。
function M.spawn(task, ...) end

--- 执行命令表或 Lua 函数。
---@param task table|function 命令参数表或函数。
---@param ... any 传给函数任务的参数。
function M.execx(task, ...) end

--- 执行管道任务。
---@param tasks table 管道任务列表。
---@param mode string 模式，通常为 `"r"` 或 `"w"`。
---@param pipe_fn? function pipe 函数。
---@return posix_pfd* pfd 管道对象。
function M.popen_pipeline(tasks, mode, pipe_fn) end

--- 执行单个任务并返回管道对象。
---@param task table|function 命令参数表或函数。
---@param mode string 模式，通常为 `"r"` 或 `"w"`。
---@param pipe_fn? function pipe 函数。
---@return posix_pfd* pfd 管道对象。
function M.popen(task, mode, pipe_fn) end

--- 关闭 popen/pipeline 对象。
---@param pfd posix_pfd* 管道对象。
---@return string? reason 结束原因。
---@return integer? status 结束状态。
function M.pclose(pfd) end

--- 执行管道并返回输出。
---@param tasks table 管道任务列表。
---@return string? output 标准输出。
---@return string? errMsg 错误信息。
function M.pipeline_slurp(tasks) end

--- 执行管道并返回迭代器。
---@param tasks table 管道任务列表。
---@return function iterator 迭代器。
function M.pipeline_iterator(tasks) end

--- 创建伪终端。
---@return integer? master 主 fd。
---@return integer? slave 从 fd。
---@return string? slaveName 从设备名。
---@return string? errMsg 错误信息。
---@return integer? errno 错误码。
function M.openpty() end

--- glob 匹配。
---@param args? table|string 参数。
---@return table? matches 匹配结果。
---@return string? errMsg 错误信息。
---@return integer? errno 错误码。
function M.glob(args) end

--- timeval 相加。
---@param lhs posix_timeval* 时间 A。
---@param rhs posix_timeval* 时间 B。
---@return posix_timeval* result 结果。
function M.timeradd(lhs, rhs) end

--- timeval 相减。
---@param lhs posix_timeval* 时间 A。
---@param rhs posix_timeval* 时间 B。
---@return posix_timeval* result 结果。
function M.timersub(lhs, rhs) end

--- timeval 比较。
---@param lhs posix_timeval* 时间 A。
---@param rhs posix_timeval* 时间 B。
---@return integer result 比较结果。
function M.timercmp(lhs, rhs) end

---@param ... any
---@return any ...
function M.isgraph(...) end
---@param ... any
---@return any ...
function M.isprint(...) end
---@param ... any
---@return any ...
function M.dir(...) end
---@param ... any
---@return any ...
function M.files(...) end
---@param ... any
---@return any ...
function M.errno(...) end
---@param ... any
---@return any ...
function M.set_errno(...) end
---@param ... any
---@return any ...
function M.fcntl(...) end
---@param ... any
---@return any ...
function M.open(...) end
---@param ... any
---@return any ...
function M.posix_fadvise(...) end
---@param ... any
---@return any ...
function M.fnmatch(...) end
---@param ... any
---@return any ...
function M.endgrent(...) end
---@param ... any
---@return any ...
function M.getgrent(...) end
---@param ... any
---@return any ...
function M.getgrgid(...) end
---@param ... any
---@return any ...
function M.getgrnam(...) end
---@param ... any
---@return any ...
function M.setgrent(...) end
---@param ... any
---@return any ...
function M.basename(...) end
---@param ... any
---@return any ...
function M.dirname(...) end
---@param ... any
---@return any ...
function M.poll(...) end
---@param ... any
---@return any ...
function M.rpoll(...) end
---@param ... any
---@return any ...
function M.endpwent(...) end
---@param ... any
---@return any ...
function M.getpwent(...) end
---@param ... any
---@return any ...
function M.getpwnam(...) end
---@param ... any
---@return any ...
function M.getpwuid(...) end
---@param ... any
---@return any ...
function M.setpwent(...) end
---@param ... any
---@return any ...
function M.sched_getscheduler(...) end
---@param ... any
---@return any ...
function M.sched_setscheduler(...) end
---@param ... any
---@return any ...
function M.kill(...) end
---@param ... any
---@return any ...
function M.killpg(...) end
---@param ... any
---@return any ...
function M.raise(...) end
---@param ... any
---@return any ...
function M.signal(...) end
---@param ... any
---@return any ...
function M.ctermid(...) end
---@param ... any
---@return any ...
function M.fileno(...) end
---@param ... any
---@return any ...
function M.fdopen(...) end
---@param ... any
---@return any ...
function M.rename(...) end
---@param ... any
---@return any ...
function M.abort(...) end
---@param ... any
---@return any ...
function M.getenv(...) end
---@param ... any
---@return any ...
function M.grantpt(...) end
---@param ... any
---@return any ...
function M.mkdtemp(...) end
---@param ... any
---@return any ...
function M.mkstemp(...) end
---@param ... any
---@return any ...
function M.openpt(...) end
---@param ... any
---@return any ...
function M.ptsname(...) end
---@param ... any
---@return any ...
function M.realpath(...) end
---@param ... any
---@return any ...
function M.setenv(...) end
---@param ... any
---@return any ...
function M.unlockpt(...) end
---@param ... any
---@return any ...
function M.LOG_MASK(...) end
---@param ... any
---@return any ...
function M.openlog(...) end
---@param ... any
---@return any ...
function M.syslog(...) end
---@param ... any
---@return any ...
function M.closelog(...) end
---@param ... any
---@return any ...
function M.setlogmask(...) end
---@param ... any
---@return any ...
function M.tcdrain(...) end
---@param ... any
---@return any ...
function M.tcflow(...) end
---@param ... any
---@return any ...
function M.tcflush(...) end
---@param ... any
---@return any ...
function M.tcgetattr(...) end
---@param ... any
---@return any ...
function M.tcsendbreak(...) end
---@param ... any
---@return any ...
function M.tcsetattr(...) end
---@param ... any
---@return any ...
function M.tcgetwinsize(...) end
---@param ... any
---@return any ...
function M.tcsetwinsize(...) end
---@param ... any
---@return any ...
function M.clock_getres(...) end
---@param ... any
---@return any ...
function M.clock_gettime(...) end
---@param ... any
---@return any ...
function M.gmtime(...) end
---@param ... any
---@return any ...
function M.localtime(...) end
---@param ... any
---@return any ...
function M.mktime(...) end
---@param ... any
---@return any ...
function M.nanosleep(...) end
---@param ... any
---@return any ...
function M.strftime(...) end
---@param ... any
---@return any ...
function M.strptime(...) end
---@param ... any
---@return any ...
function M.time(...) end
---@param ... any
---@return any ...
function M._exit(...) end
---@param ... any
---@return any ...
function M.access(...) end
---@param ... any
---@return any ...
function M.alarm(...) end
---@param ... any
---@return any ...
function M.chdir(...) end
---@param ... any
---@return any ...
function M.chown(...) end
---@param ... any
---@return any ...
function M.close(...) end
---@param ... any
---@return any ...
function M.crypt(...) end
---@param ... any
---@return any ...
function M.dup(...) end
---@param ... any
---@return any ...
function M.dup2(...) end
---@param ... any
---@return any ...
function M.exec(...) end
---@param ... any
---@return any ...
function M.execp(...) end
---@param ... any
---@return any ...
function M.fdatasync(...) end
---@param ... any
---@return any ...
function M.fork(...) end
---@param ... any
---@return any ...
function M.fsync(...) end
---@param ... any
---@return any ...
function M.getcwd(...) end
---@param ... any
---@return any ...
function M.getgroups(...) end
---@param ... any
---@return any ...
function M.getegid(...) end
---@param ... any
---@return any ...
function M.geteuid(...) end
---@param ... any
---@return any ...
function M.getgid(...) end
---@param ... any
---@return any ...
function M.getlogin(...) end
---@param ... any
---@return any ...
function M.getopt(...) end
---@param ... any
---@return any ...
function M.getpgrp(...) end
---@param ... any
---@return any ...
function M.getpid(...) end
---@param ... any
---@return any ...
function M.getppid(...) end
---@param ... any
---@return any ...
function M.getuid(...) end
---@param ... any
---@return any ...
function M.gethostid(...) end
---@param ... any
---@return any ...
function M.isatty(...) end
---@param ... any
---@return any ...
function M.lchown(...) end
---@param ... any
---@return any ...
function M.link(...) end
---@param ... any
---@return any ...
function M.linkat(...) end
---@param ... any
---@return any ...
function M.lseek(...) end
---@param ... any
---@return any ...
function M.nice(...) end
---@param ... any
---@return any ...
function M.pathconf(...) end
---@param ... any
---@return any ...
function M.pipe(...) end
---@param ... any
---@return any ...
function M.read(...) end
---@param ... any
---@return any ...
function M.readlink(...) end
---@param ... any
---@return any ...
function M.rmdir(...) end
---@param ... any
---@return any ...
function M.setpid(...) end
---@param ... any
---@return any ...
function M.sleep(...) end
---@param ... any
---@return any ...
function M.sync(...) end
---@param ... any
---@return any ...
function M.sysconf(...) end
---@param ... any
---@return any ...
function M.ttyname(...) end
---@param ... any
---@return any ...
function M.tcgetpgrp(...) end
---@param ... any
---@return any ...
function M.tcsetpgrp(...) end
---@param ... any
---@return any ...
function M.unlink(...) end
---@param ... any
---@return any ...
function M.write(...) end
---@param ... any
---@return any ...
function M.ftruncate(...) end
---@param ... any
---@return any ...
function M.truncate(...) end
---@param ... any
---@return any ...
function M.utime(...) end
---@param ... any
---@return any ...
function M.msgctl(...) end
---@param ... any
---@return any ...
function M.msgget(...) end
---@param ... any
---@return any ...
function M.msgsnd(...) end
---@param ... any
---@return any ...
function M.msgrcv(...) end
---@param ... any
---@return any ...
function M.getrlimit(...) end
---@param ... any
---@return any ...
function M.setrlimit(...) end
---@param ... any
---@return any ...
function M.socket(...) end
---@param ... any
---@return any ...
function M.socketpair(...) end
---@param ... any
---@return any ...
function M.getaddrinfo(...) end
---@param ... any
---@return any ...
function M.connect(...) end
---@param ... any
---@return any ...
function M.bind(...) end
---@param ... any
---@return any ...
function M.listen(...) end
---@param ... any
---@return any ...
function M.accept(...) end
---@param ... any
---@return any ...
function M.recv(...) end
---@param ... any
---@return any ...
function M.recvfrom(...) end
---@param ... any
---@return any ...
function M.send(...) end
---@param ... any
---@return any ...
function M.sendto(...) end
---@param ... any
---@return any ...
function M.shutdown(...) end
---@param ... any
---@return any ...
function M.setsockopt(...) end
---@param ... any
---@return any ...
function M.getsockopt(...) end
---@param ... any
---@return any ...
function M.getsockname(...) end
---@param ... any
---@return any ...
function M.getpeername(...) end
---@param ... any
---@return any ...
function M.if_nametoindex(...) end
---@param ... any
---@return any ...
function M.S_ISBLK(...) end
---@param ... any
---@return any ...
function M.S_ISCHR(...) end
---@param ... any
---@return any ...
function M.S_ISDIR(...) end
---@param ... any
---@return any ...
function M.S_ISFIFO(...) end
---@param ... any
---@return any ...
function M.S_ISLNK(...) end
---@param ... any
---@return any ...
function M.S_ISREG(...) end
---@param ... any
---@return any ...
function M.S_ISSOCK(...) end
---@param ... any
---@return any ...
function M.chmod(...) end
---@param ... any
---@return any ...
function M.lstat(...) end
---@param ... any
---@return any ...
function M.fstat(...) end
---@param ... any
---@return any ...
function M.mkdir(...) end
---@param ... any
---@return any ...
function M.mkfifo(...) end
---@param ... any
---@return any ...
function M.stat(...) end
---@param ... any
---@return any ...
function M.umask(...) end
---@param ... any
---@return any ...
function M.statvfs(...) end
---@param ... any
---@return any ...
function M.gettimeofday(...) end
---@param ... any
---@return any ...
function M.times(...) end
---@param ... any
---@return any ...
function M.uname(...) end
---@param ... any
---@return any ...
function M.wait(...) end

return M
