---@meta posix

--------------------------------------------------------------------------------
-- POSIX module
--------------------------------------------------------------------------------

---@class posix_timeval*
---@field sec? integer seconds.
---@field usec? integer microseconds.
---@field tv_sec? integer seconds.
---@field tv_usec? integer microseconds.

---@class posix_pfd*
---@field pids integer[] List of process numbers.
---@field fd integer File descriptor.

---@class posix*
---@field version string Version information.
---@field sys posix_sys* sys Collection of submodules.
---@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

--- Check the current user's access rights to the file.
---@param file string File path.
---@param mode string|integer access mode.
---@return integer? ok 0 on success.
---@return string? errMsg error message.
---@return integer? errno error code.
function M.euidaccess(file, mode) end

--- Execute the command list or Lua function in the child process and wait for completion.
---@param task table|function Command parameter list or function.
---@param ... any Parameters passed to the task.
---@return integer? status Exit status, signal number, or errno.
---@return string? reason Ending reason or error message.
function M.spawn(task, ...) end

--- Execute a command list or Lua function.
---@param task table|function Command parameter list or function.
---@param ... any Parameters passed to the function task.
function M.execx(task, ...) end

--- Execute pipeline tasks.
---@param tasks table Pipeline task list.
---@param mode string Mode, usually `"r"` or `"w"`.
---@param pipe_fn? function pipe function.
---@return posix_pfd* pfd Pipe object.
function M.popen_pipeline(tasks, mode, pipe_fn) end

--- Execute a single task and return a pipeline object.
---@param task table|function Command parameter list or function.
---@param mode string Mode, usually `"r"` or `"w"`.
---@param pipe_fn? function pipe function.
---@return posix_pfd* pfd Pipe object.
function M.popen(task, mode, pipe_fn) end

--- Close the popen/pipeline object.
---@param pfd posix_pfd* Pipe object.
---@return string? reason Ending reason.
---@return integer? status end state.
function M.pclose(pfd) end

--- Execute the pipeline and return the output.
---@param tasks table Pipeline task list.
---@return string? output stdout.
---@return string? errMsg error message.
function M.pipeline_slurp(tasks) end

--- Execute the pipeline and return the iterator.
---@param tasks table Pipeline task list.
---@return function iterator iterator.
function M.pipeline_iterator(tasks) end

--- Create a pseudo terminal.
---@return integer? master main fd.
---@return integer? slave from fd.
---@return string? slaveName Slave device name.
---@return string? errMsg error message.
---@return integer? errno error code.
function M.openpty() end

--- glob match.
---@param args? table|string parameter.
---@return table? matches Matching results.
---@return string? errMsg error message.
---@return integer? errno error code.
function M.glob(args) end

--- timevals are added.
---@param lhs posix_timeval* Time A.
---@param rhs posix_timeval* Time B.
---@return posix_timeval* result result.
function M.timeradd(lhs, rhs) end

--- timeval is subtracted.
---@param lhs posix_timeval* Time A.
---@param rhs posix_timeval* Time B.
---@return posix_timeval* result result.
function M.timersub(lhs, rhs) end

--- timeval comparison.
---@param lhs posix_timeval* Time A.
---@param rhs posix_timeval* Time B.
---@return integer result Compare the results.
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
