LuaPosix: Difference between revisions

From Alpine Linux
m (→‎References: Rescued a dead link.)
 
(77 intermediate revisions by 9 users not shown)
Line 1: Line 1:
=Lua Posix=
This is a list of the Lua Posix functions. Included is helpful snippets of code.
This is a list of the Lua Posix functions. Included is helpful snipets of code.
Install lua posix. To get this list do:
Install lua posix. To get this list do:
  bar = require "posix"
  require "posix"
  for a in pairs(bar) do print(a) end
  for a in pairs(posix) do  
  print(a)
end
 
=access=
check real user's permissions for a file
 
====Synopsis====
posix.access(''pathname'', ''mode'')
 
====Description====
 
'''access()'''  checks  whether the calling process can access the file ''pathname''. If pathname is a symbolic link, it is dereferenced.
 
The mode specifies the accessibility check(s) to be performed,  and  is either the string '''"f"''', or one or more of '''"r"''', '''"w"''', and '''"x"'''. '''"f"''' tests for the existence of the file. '''"r"''', '''"w"''', and '''"x"''' test whether the file exists and grants read, write, and execute permissions, respectively.
 
====Return Value====
 
On success (all requested permissions granted), zero is returned. On error (at least one char in mode asked for a permission that is denied, or some other error occurred), nil, errorstr and errno is returned.
 
====Examples====
 
status, errstr, errno = posix.access("/etc/passwd", "rw")
 
if not posix.access("/foo", "f") then
  print("/foo does not exist")
end
 
====References====
 
https://man7.org/linux/man-pages/man2/access.2.html
 
=chdir=
change working directory
 
====Synopsis====
posix.chdir(''path'')
 
====Return Value====
On success, zero is returned. On error, nil, an error string and errno is returned.
 
====Examples====
status, errstr, errno = posix.chdir("/tmp")
 
if posix.chdir("/tmp") then
  print("Changed current working dir to:", posix.getpwd())
fi
 
=chmod=
change permissions of a file
 
====Synopsis====
posix.chmod(''path'', ''mode'')
 
====Description====
The  mode of the file given by ''path'' is changed.


==access==
Modes are specified in one of the following formats
'''INPUT'''
* "rwxrwxrwx" (i.e "rw-rw-w--")
*Path- file or directory path that wants to be checked
* "ugoa+-=rwx" (i.e "u+w")
*Permission - what permissions do you want to check
* "+-=rwx" (i.e "+w")
** "r" = read
** "w" = write
** "x" = execute
** "f" = all permissions? <span style="color:red">not sure</span>
'''OUPUT'''
*string - 0 for success, nil for failure if done
bar = require "posix"
temp = bar.access("/etc/passwd", "w")
print(temp)
Will give more information like
bar = require "posix"
print(bar.access("/etc/passwd", "w"))
--If nil will give back the error too
nil    /etc/passwd: Permission denied  13


==chdir==
====Return Value====
'''INPUT'''
On success, zero is returned. On error, nil, errstr and errno is returned.
*Path - where do you want to change directory to
'''OUPUT'''
* 0 if success
** nil if failed


bar = require "posix"
====Examples====
  bar.chdir("/etc/")
  posix.chmod("/tmp", "a+rwx")
--print(bar.getcwd()) to see where you are
0 if success, nil if failure. If you
print(bar.chdir("/var/lob"))
-- it will print the system error message also
nil    /var/lob: No such file or directory    2


==chmod==
status, errstr = posix.chmod(file, "-w")
'''INPUT'''
  if not status then
*PATH - where is the file or directory
  print(errstr)
**MODE - what mode to you want to change on the file
fi
'''OUPUT'''
* string - 0 if sucess, nil failure
bar = require "posix"
bar.chmod("/etc/passwd", "a=rwx")
  --looks like you need to use the ugoa format for this, not numbers


==chown==
=chown=
'''INPUT'''
'''INPUT'''
*Path-location of file or directory
*Path-location of file or directory
Line 60: Line 86:
  --above will give back nil. Since we printed it will also give back the system errors.
  --above will give back nil. Since we printed it will also give back the system errors.


==ctermid==
=clock_getres=
'''TODO'''
 
=clock_gettime=
'''TODO'''
 
=crypt=
password and data encryption
====Synopsis====
posix.crypt(''string'', ''salt'')
 
====Return Value====
On success, zero is returned. On error, nil, an error string and errno is returned.
 
 
 
=ctermid=
'''INPUT'''
'''INPUT'''
*NONE- DISPLAYS the terminal id
*NONE- DISPLAYS the terminal id
Line 68: Line 110:
  print(bar.ctermid())
  print(bar.ctermid())


==dir==
=dir=
Directory listing
read a directory
'''INPUT'''
 
* PATH - directory
====Synopsis====
'''OUTPUT'''
posix.dir(''path'')
*TABLE - table with the file name contents of the directory
 
**Failure returns a nil value
====Description====
bar = require "posix"
Reads directory ''path'', and returns a table with all the files. If ''path'' is omitted, current working dir is read.
  bobo = bar.dir("/var/log")
 
  for a,b in ipairs(bobo) do print(b) end
====Return Value====
  -- the bobo table will output all the file names in /var/log/
'''posix.dir()''' returns a table with all filenames on succes. On error, nil, an error string and errno is returned.
 
====Examples====
  files, errstr, errno = posix.dir("/var/log")
  if files then
  for a,b in ipairs(files) do
    print(b)
  end
  else
  print(errstr)
end
 
=dup=
duplicate a file descriptor
 
====Synopsis====
posix.dup(''oldfd''[, ''newfd''])
 
====Description====
'''posix.dup()''' creates a copy of the file descriptor ''oldfd''.
 
''newfd'' will be the copy of ''oldfd'', closing ''newfd'' first if necessary.
 
If ''newfd'' is omitted, the lowest-numbered unused descriptor will be used for the new descriptor.
 
====Return Value====
'''posix.dup()''' returns the new descriptor, or nil, an error string and errno if an error occured.


==errno==
=errno=


Display the error information
Display the error information
Line 93: Line 161:
  -- a will be nil or 0, b will be No such file or directory or Success
  -- a will be nil or 0, b will be No such file or directory or Success


==exec==
=exec=
<span style="color:red">(not working)</span>
execute a file
I maybe running it wrong from interactive lua. But it always exits the interactive session.
====Synopsis====
posix.exec(path,[args])
 
====Description====
'''exec'''() replaces the current process image with a new process image.
 
====Return Value====
On success '''exec'''() will not return. On error nil, errstr and errno is returned.
 
=execp=
execute a file using PATH environment variable
====Synopsis====
posix.execp(path,[args])
 
====Description====
'''execp'''() replaces the current process image with a new process image. If ''path'' does not contain a slash (/) character the file wil be searched for in PATH environment variable.
 
====Return Value====
On success '''execp'''() will not return. On error nil, errstr and errno is returned.


=mkfifo=
'''INPUT'''
'''INPUT'''
*PATH-Location of binary
*PATH- where to make the fifo
*ARGs-options to pass to binary
'''OUPUT'''
'''OUPUT'''
*Strings
* 0 for success, nil for failure
 
  bar = require "posix"
  bar = require "posix"
  bobo = bar.exec("/bin/ls", "-l", "/etc/")
  print(bar.mkfifo("/tmp/bobo"))
 
--Returns 0 for success, nil for failure
==files==
<span style="color:red">(not working)</span>


Is only returning a function
=files=
Returns an interator function that loops over each file in the given directory


'''INPUT'''
'''INPUT'''
*PATH- Directory
*PATH- Directory
'''OUPUT'''
'''OUPUT'''
*0
  require "posix"
*nil
  bar = require "posix"
bobo = bar.files("/etc/bogus/")
print(bobo)


==fork==
for name in posix.files("/etc") do
<span style="color:red">(needs more explaining)</span>
    print (name)
end


=fork=
'''INPUT'''
'''INPUT'''
*None
*None
'''OUPUT'''
'''OUTPUT'''
If you run this in interactive lua the function will give you a prompt with one more >
returns: -1 on error, 0 to the child process, and the pid of the child to the parent.
> >
 
  bar = require "posix"
  require("posix")
  bar.fork()
   
  for a=1,10 do print(a) end
print ("parent: my pid is: " .. posix.getpid("pid"))
  --the above runs and then exists the fork
local pid = posix.fork ()  
   
if ( pid == -1 ) then
        print ("parent: The fork failed.")
elseif ( pid == 0 ) then
        print ("child: Hello World! I am pid: " .. posix.getpid("pid") )
        print ("child: I'll sleep for 1 second ... ")
        posix.sleep(1)
        print ("child: Good bye");
else
        print ("parent: While the child sleeps, I'm still running.")
        print ("parent: waiting for child (pid:" .. pid .. ") to die...")
        posix.wait(pid)
        print ("parent: child died, but I'm still alive.")
        print ("parent: Good bye")
end
 
parent: my pid is: 11050
child: Hello World! I am pid: 11051
child: I'll sleep for 1 second ...
  parent: While the child sleeps, I'm still running.
parent: waiting for child (pid:11051) to die...
child: Good bye
parent: child died, but I'm still alive.
parent: Good bye
 
=gmtime=
'''TODO'''


==getcwd==
=getcwd=
Get current working directory
'''INPUT'''
'''INPUT'''
*NONE
*NONE
'''OUTPUT'''
'''OUTPUT'''
*String- contents of which is the current working directory
*String- contents of which is the current working directory
  bar = require "posix"
  require "posix"
  print(bar.getcwd())
  print(posix.getcwd())


==getenv==
=getenv=
'''INPUT'''
'''INPUT'''
*NONE
*NONE
Line 151: Line 265:
  -- Varible - Value
  -- Varible - Value


==getgroup==
=getgroup=
'''INPUT'''
*GID, or groupname
'''OUPUT'''
*TABLE -contents of which hold the group name,gid, and users
bar = require "posix"
bobo = bar.getgroup(1000)
for a,b in pairs(bobo) do print(a,b) end
--if you use pairs then bobo will print also the name and gid or the group
--if you use ipairs then just the group members
1 user1
2 user2
name wheel
gid 1
 
=getlogin=
get user name
 
====Synopsis====
posix.getlogin()
 
====Description====
 
'''getlogin()''' returns a string containing the name of the user logged in on the controlling terminal of the process, or nil if this information cannot be determined.
 
====Examples====
 
print(posix.getlogin())
 
=getrlimit=
'''TODO'''
 
=getpasswd=
get password file entry
 
====Synopsis====
posix.getpasswd(''user'', ''field'')
 
====Description====
 
'''getpasswd()''' queries the local /etc/passwd database. ''user'' can be either an uid or a username. ''field'' is a string of one of '''"uid"''', '''"name"''', '''"gid"''', '''"password"''', '''"gecos"''', '''"dir"''' or '''"shell"'''.
 
====Return Value====
 
Returns the value of ''field'' for ''user''. If ''field'' is omitted, a table with all fields is returned.
 
====Examples====
 
for a,b in pairs(posix.getpasswd("root")) do
  print(a,b)
end
 
Output:
uid    0
name    root
gid    0
passwd  x
gecos  root
dir    /root
shell  /bin/bash
 
print(posix.getpasswd("root", "shell"))
Output:
/bin/sh
 
=getprocessid=
'''INPUT'''
*Selector - either [egid,euid,gid,uid,pgrp,pid,ppid,NULL]
'''OUPUT'''
*Number that matches the current process and the selector
bar = require "posix"
print(bar.getprocessid("gid"))
18456
--it just printed the current process id for the script or interactive lua.
 
 
Is there a version difference here?  AL 1.7.7 calls this "getpid" [[User:Nangel|Nangel]]
 
=gettimeofday=
'''TODO'''
 
=glob=
find pathnames matching a pattern
====Synopsis====
posix.glob(''pattern'')
 
====Description====
The '''glob'''() function searches for all the pathnames matching ''pattern'' according to the rules used by the shell.
 
====Return Value====
On successful comlpetion, '''glob'''() returns a table with the filenames. On error '''glob'''() returns nil, errstr and errno.
 
====Examples====
for i,j in pairs(posix.glob("/proc/[0-9]*/exe")) do
  local f = posix.readlink(j)
  if f then
    print(f)
  end
end
 
=kill=
'''INPUT'''
*PID- process identifier
*Signal- to send to the process
'''OUPUT'''
 
bar = require "posix"
--kill your current process
bobo = bar.getprocessid("pid")
bar.kill(bobo,9)
---Signals looks to be the number signals accepted in Unix
 
=link=
make a new name for a file
====Synopsis====
posix.dup(''oldpath'', ''newpath''[, ''symbolic''])
 
====Description====
Creates a new name to an existing file. If ''symbolic'' is true the new name will be a symbolic link (soft link), otherwise it will be a hard link.
 
====Return Value====
On success, zero is returned. On error '''link'''() returns nil, errstr and errno.
 
====Examples====
require "posix"
source="/etc/passwd"
dest="testfile"
status, errstr = posix.link(source, dest, true)
if status == nil then
  io.stderr:write(dest..": "..errstr.."\n")
end
 
 
=localtime=
'''TODO'''
 
=mkdir=
create a directory
====Synopsis====
posix.dup(''pathname'')
 
====Descritption====
'''mkdir'''() attempts to create a directory named pathname.
 
====Return Value====
'''glob'''() returns 0 on success, or nil, errstr and errno on error.
 
====Example====
require "posix"
newdir = "/home/user/bobo"
status, errstr = posix.mkdir(newdir)
if status == nil then
        io.stderr:write(newdir..": "..errstr.."\n")
end
 
 
=pathconf=
get configuration values for files
 
====Synopsis====
posix.pathconf(''path'', ''name'')
 
====Description====
 
'''posix.pathconf()''' gets a value for configuration option ''name'' for the  filename ''path''. Setting ''name'' equal to one of the following strings returns  the  following configuration options:
 
* '''link_max'''
** returns the maximum number of links to the file. If ''path'' refer to a directory, then the value applies to the whole directory.
* '''max_canon'''
** returns the maximum length of a formatted input line, where ''path'' must refer to a terminal.
* '''max_input'''
** returns the maximum length of an input line, where ''path'' must refer to  a  terminal.
* '''name_max'''
** returns the maximum length of a filename in the directory ''path'' the process is allowed to create.
* '''path_max'''
** returns the maximum length of a relative pathname when ''path'' is the current working directory.
* '''pipe_buf'''
** returns the size of the pipe buffer, where ''path'' must refer to a FIFO.
* '''chown_restricted'''
** returns non-zero if the chown(2) call may not be used on this file. If ''path '' refer to a directory, then this applies to all files in that directory.
* '''no_trunc'''
** returns non-zero if accessing filenames longer than '''name_max''' generates an error.
* '''vdisable'''
** returns non-zero if special character processing can be disabled, where ''path'' must refer to a terminal.
 
====Return Value====
 
The limit  is returned, if one exists. If ''name'' is omitted, a table of all limits is returned.
 
====Examples====
for i,j in pairs(posix.pathconf("/dev/tty" )) do
  print(i, j)
end
Will ouput:
pipe_buf        4096
link_max        127
path_max        4096
max_canon      255
chown_restricted        1
no_trunc        1
max_input      255
name_max        255
vdisable        0
 
====References====
 
https://man7.org/linux/man-pages/man3/pathconf.3.html
 
=pipe=
'''TODO'''
====Example====
require "posix"
rd, wr = posix.pipe()
wr:write("hello, world\n")
wr:close()
print(rd:read("*all"))
rd:close()
 
=putenv=
'''INPUT'''
*STRING-
'''OUPUT'''
* 0 if success, nil if not
 
require "posix"
posix.putenv("DISPLAY=localhost:0")
 
=readlink=
'''INPUT'''
*PATH-path to link
'''OUPUT'''
* 0 if success, nil if failure
require "posix"
posix.readlink("/etc/rc.d/postfix")
--0 if sucess, nil if failed


==getlogin==
=rmdir=
'''INPUT'''
*PATH- path to directory
'''OUPUT'''
* 0 for sucess
* nil for failure
require "posix"
posix.rmdir("/home/testdir")
-- 0 for success, nil for failure


==getpassword==
=setgid=
'''INPUT'''
*Group
** Name or GID
'''OUPUT'''
* 0 for sucess
* nil for failure


==getprocessid==
require "posix"
posix.setgid("1000")


==kill==
=setlogmask=
'''TODO'''


==link==
=setrlimit=
'''TODO'''


==mkdir==
=setuid=
'''INPUT'''
*User
** Name or UID
'''OUPUT'''
*0 for sucess, nil for failure
require "posix"
posix.setuid("1000")
-- 0 for sucess, nil for failure


==mkfifo==
=sleep=
'''INPUT'''
*SECONDS
'''OUPUT'''
*0 for sucess, nil for failure


==patchconf==
require "posix"
posix.sleep(5)
-- will sleep for 5 seconds, usually will not fail


==putenv==
=stat=
'''INPUT'''
*PATH - location of file or direcory
*Selector -
**dev
**type
**ctime
**nlink
**atime
**uid
**mtime
**gid
**mode
**ino
**size
'''OUPUT'''
*If no mode will output as a table with each of the above set
*If mode is set then will give a string with value
require "posix"
bar = posix.stat("/etc/")
for a,b in pairs(bar) do print(a,b) end
dev    769
type    directory
ctime  1194624026
nlink  113
atime  1194866712
uid    0
mtime  1194624026
gid    0
mode    rwxr-xr-x
ino    4
size    6208


==readlink==
=sysconf=
'''INPUT'''
*Accept a selector if given anything
**tzname_max
**clk_tck
**stream_max
**ngroups_max
**child_max
**open_max
**saved_ids
**job_control
**version
**arg_max
'''OUPUT'''
*TABLE - if no selector
*STRING - if 1 selector


==rmdir==
require "posix"
bar = posix.stat()
for a,b in pairs(bar) do print(a,b) end
tzname_max      6
clk_tck 100
stream_max      16
ngroups_max    65536
child_max      999
open_max        1024
saved_ids      1
job_control    1
version 200112
arg_max 131072


==setgid==
=strftime=
'''TODO'''


==setuid==
=time=
'''TODO'''


==sleep==
=times=
'''INPUT'''
*
**utime
**cstime
**elapsed
**cutime
**stime
'''OUPUT'''
*TABLE - if non specified output all values in a table
*STING - if one of the above is specified string output
require "posix"
bar = posix.times()
for a,b in pairs(bar) do print(a,b) end
--Maybe takes function calls to see how long they run


==stat==
=ttyname=
'''INPUT'''
*NONE
'''OUPUT'''
*STRING - what tty am I on


==symlink==
require "posix"
print(posix.ttyname())


==sysconf==
=umask=
'''INPUT'''
*NONE
** or mode, what to change the umask to
'''OUPUT'''
*STRING - what is the current umask set to
** or mode, what to change is to


==times==
require "posix"
print(posix.umask)
-- rwxr-xr-x
--or change it
posix.umask("a=rwx")
print(posix.umask())
-- rwxrwxrwx


==ttyname==
= uname =
get name and information about current kernel


==umask==
====Synopsis====
posix.access(''[format]'')


==uname==
====Description====


==utime==
'''uname()''' returns the string ''format'' with directives prefixed by '%' replaced with specified systrem information. If ''format'' is not specified or is nil, then the string "%s %n %r %v %m" will be used.


==wait==
The format string directives are:


%s - kernel name
%n - network node hostname
%r - kernel release
%v - kernel version
%m - machine hardware name
====Return Value====
A string with the formatted system information.
====Examples====
print("Kernel version is: "..posix.uname("%v"))
====References====
https://man7.org/linux/man-pages/man2/uname.2.html
=utime=
'''INPUT'''
*Path-location of file or directory
**atime - access time
**mtime - modification time
'''OUPUT'''
* 0 for sucess
* nil for failure
require "posix"
posix.utime("/var/log/test",atime,mtime)
=wait=
'''INPUT'''
*PID - process id
'''OUPUT'''
* 0 for success
* nil for failure
require "posix"
posix.wait(10)
----
----


'''If you are using this under linux also get '''
'''If you are using this under linux also get '''


==setenv==
=setenv=
'''INPUT'''
*Name- Name of Varible
*Value- What the Name varible should be set to
**overwrite- is this overwriting one already set
'''OUPUT'''
* 0 for sucess, nil for failure
 
require "posix"
posix.setenv("BAR","YES")
 
=unsetenv=
'''INPUT'''
*NAME - name of the varible to unset
'''OUPUT'''
* 0 for sucess, nil for failure
 
require "posix"
posix.unsetenv("BAR")
 


==unsetenv==
[[Category:Lua]]
[[Category:ACF]]

Latest revision as of 20:09, 30 August 2023

This is a list of the Lua Posix functions. Included is helpful snippets of code. Install lua posix. To get this list do:

require "posix"
for a in pairs(posix) do 
  print(a)
end

access

check real user's permissions for a file

Synopsis

posix.access(pathname, mode)

Description

access() checks whether the calling process can access the file pathname. If pathname is a symbolic link, it is dereferenced.

The mode specifies the accessibility check(s) to be performed, and is either the string "f", or one or more of "r", "w", and "x". "f" tests for the existence of the file. "r", "w", and "x" test whether the file exists and grants read, write, and execute permissions, respectively.

Return Value

On success (all requested permissions granted), zero is returned. On error (at least one char in mode asked for a permission that is denied, or some other error occurred), nil, errorstr and errno is returned.

Examples

status, errstr, errno = posix.access("/etc/passwd", "rw")
if not posix.access("/foo", "f") then
  print("/foo does not exist")
end

References

https://man7.org/linux/man-pages/man2/access.2.html

chdir

change working directory

Synopsis

posix.chdir(path)

Return Value

On success, zero is returned. On error, nil, an error string and errno is returned.

Examples

status, errstr, errno = posix.chdir("/tmp")
if posix.chdir("/tmp") then
  print("Changed current working dir to:", posix.getpwd())
fi

chmod

change permissions of a file

Synopsis

posix.chmod(path, mode)

Description

The mode of the file given by path is changed.

Modes are specified in one of the following formats

  • "rwxrwxrwx" (i.e "rw-rw-w--")
  • "ugoa+-=rwx" (i.e "u+w")
  • "+-=rwx" (i.e "+w")

Return Value

On success, zero is returned. On error, nil, errstr and errno is returned.

Examples

posix.chmod("/tmp", "a+rwx")
status, errstr = posix.chmod(file, "-w")
if not status then
  print(errstr)
fi

chown

INPUT

  • Path-location of file or directory
  • UID - User id number
  • GID - Group id number

OUPUT

  • String - 0 is success and nil for failure
bar = require "posix"
print(bar.chown("/etc/passwd",100,200)
--above will give back nil. Since we printed it will also give back the system errors.

clock_getres

TODO

clock_gettime

TODO

crypt

password and data encryption

Synopsis

posix.crypt(string, salt)

Return Value

On success, zero is returned. On error, nil, an error string and errno is returned.


ctermid

INPUT

  • NONE- DISPLAYS the terminal id

OUTPUT

  • String with the terminal id
bar = require "posix"
print(bar.ctermid())

dir

read a directory

Synopsis

posix.dir(path)

Description

Reads directory path, and returns a table with all the files. If path is omitted, current working dir is read.

Return Value

posix.dir() returns a table with all filenames on succes. On error, nil, an error string and errno is returned.

Examples

files, errstr, errno = posix.dir("/var/log")
if files then
  for a,b in ipairs(files) do
    print(b)
  end
else
  print(errstr)
end

dup

duplicate a file descriptor

Synopsis

posix.dup(oldfd[, newfd])

Description

posix.dup() creates a copy of the file descriptor oldfd.

newfd will be the copy of oldfd, closing newfd first if necessary.

If newfd is omitted, the lowest-numbered unused descriptor will be used for the new descriptor.

Return Value

posix.dup() returns the new descriptor, or nil, an error string and errno if an error occured.

errno

Display the error information

INPUT

  • NONE

OUPUT

  • Success, or Error message
bar = require "posix"
a,b = bar.dir("/var/foo"), bar.errno()
print(a,b)
-- a will be nil or 0, b will be No such file or directory or Success

exec

execute a file

Synopsis

posix.exec(path,[args])

Description

exec() replaces the current process image with a new process image.

Return Value

On success exec() will not return. On error nil, errstr and errno is returned.

execp

execute a file using PATH environment variable

Synopsis

posix.execp(path,[args])

Description

execp() replaces the current process image with a new process image. If path does not contain a slash (/) character the file wil be searched for in PATH environment variable.

Return Value

On success execp() will not return. On error nil, errstr and errno is returned.


mkfifo

INPUT

  • PATH- where to make the fifo

OUPUT

  • 0 for success, nil for failure
bar = require "posix"
print(bar.mkfifo("/tmp/bobo"))
--Returns 0 for success, nil for failure

files

Returns an interator function that loops over each file in the given directory

INPUT

  • PATH- Directory

OUPUT

require "posix"
for name in posix.files("/etc") do
    print (name)
end

fork

INPUT

  • None

OUTPUT returns: -1 on error, 0 to the child process, and the pid of the child to the parent.

require("posix")

print ("parent: my pid is: " .. posix.getpid("pid")) 

local pid = posix.fork () 

if ( pid == -1 ) then
        print ("parent: The fork failed.")
elseif ( pid == 0 ) then
        print ("child: Hello World! I am pid: " .. posix.getpid("pid") )
        print ("child: I'll sleep for 1 second ... ")
        posix.sleep(1)
        print ("child: Good bye");
else
        print ("parent: While the child sleeps, I'm still running.")
        print ("parent: waiting for child (pid:" .. pid .. ") to die...")
        posix.wait(pid)
        print ("parent: child died, but I'm still alive.")
        print ("parent: Good bye")
end
parent: my pid is: 11050
child: Hello World! I am pid: 11051
child: I'll sleep for 1 second ... 
parent: While the child sleeps, I'm still running.
parent: waiting for child (pid:11051) to die...
child: Good bye
parent: child died, but I'm still alive.
parent: Good bye

gmtime

TODO

getcwd

Get current working directory INPUT

  • NONE

OUTPUT

  • String- contents of which is the current working directory
require "posix"
print(posix.getcwd())

getenv

INPUT

  • NONE

OUPUT

  • Table - Current Environment settings
bar = require "posix"
bobo = bar.getenv()
for a,b in pairs(bobo) do print(b) end
-- Varible - Value

getgroup

INPUT

  • GID, or groupname

OUPUT

  • TABLE -contents of which hold the group name,gid, and users
bar = require "posix"
bobo = bar.getgroup(1000)
for a,b in pairs(bobo) do print(a,b) end
--if you use pairs then bobo will print also the name and gid or the group
--if you use ipairs then just the group members
1 user1
2 user2
name wheel
gid 1

getlogin

get user name

Synopsis

posix.getlogin()

Description

getlogin() returns a string containing the name of the user logged in on the controlling terminal of the process, or nil if this information cannot be determined.

Examples

print(posix.getlogin())

getrlimit

TODO

getpasswd

get password file entry

Synopsis

posix.getpasswd(user, field)

Description

getpasswd() queries the local /etc/passwd database. user can be either an uid or a username. field is a string of one of "uid", "name", "gid", "password", "gecos", "dir" or "shell".

Return Value

Returns the value of field for user. If field is omitted, a table with all fields is returned.

Examples

for a,b in pairs(posix.getpasswd("root")) do
  print(a,b)
end

Output:

uid     0
name    root
gid     0
passwd  x
gecos   root
dir     /root
shell   /bin/bash
print(posix.getpasswd("root", "shell"))

Output:

/bin/sh

getprocessid

INPUT

  • Selector - either [egid,euid,gid,uid,pgrp,pid,ppid,NULL]

OUPUT

  • Number that matches the current process and the selector
bar = require "posix"
print(bar.getprocessid("gid"))
18456 
--it just printed the current process id for the script or interactive lua.


Is there a version difference here? AL 1.7.7 calls this "getpid" Nangel

gettimeofday

TODO

glob

find pathnames matching a pattern

Synopsis

posix.glob(pattern)

Description

The glob() function searches for all the pathnames matching pattern according to the rules used by the shell.

Return Value

On successful comlpetion, glob() returns a table with the filenames. On error glob() returns nil, errstr and errno.

Examples

for i,j in pairs(posix.glob("/proc/[0-9]*/exe")) do
  local f = posix.readlink(j)
  if f then
    print(f)
  end
end

kill

INPUT

  • PID- process identifier
  • Signal- to send to the process

OUPUT

bar = require "posix"
--kill your current process
bobo = bar.getprocessid("pid")
bar.kill(bobo,9)
---Signals looks to be the number signals accepted in Unix

link

make a new name for a file

Synopsis

posix.dup(oldpath, newpath[, symbolic])

Description

Creates a new name to an existing file. If symbolic is true the new name will be a symbolic link (soft link), otherwise it will be a hard link.

Return Value

On success, zero is returned. On error link() returns nil, errstr and errno.

Examples

require "posix"
source="/etc/passwd"
dest="testfile"
status, errstr = posix.link(source, dest, true)
if status == nil then
  io.stderr:write(dest..": "..errstr.."\n")
end


localtime

TODO

mkdir

create a directory

Synopsis

posix.dup(pathname)

Descritption

mkdir() attempts to create a directory named pathname.

Return Value

glob() returns 0 on success, or nil, errstr and errno on error.

Example

require "posix"
newdir = "/home/user/bobo"
status, errstr = posix.mkdir(newdir)
if status == nil then
        io.stderr:write(newdir..": "..errstr.."\n")
end


pathconf

get configuration values for files

Synopsis

posix.pathconf(path, name)

Description

posix.pathconf() gets a value for configuration option name for the filename path. Setting name equal to one of the following strings returns the following configuration options:

  • link_max
    • returns the maximum number of links to the file. If path refer to a directory, then the value applies to the whole directory.
  • max_canon
    • returns the maximum length of a formatted input line, where path must refer to a terminal.
  • max_input
    • returns the maximum length of an input line, where path must refer to a terminal.
  • name_max
    • returns the maximum length of a filename in the directory path the process is allowed to create.
  • path_max
    • returns the maximum length of a relative pathname when path is the current working directory.
  • pipe_buf
    • returns the size of the pipe buffer, where path must refer to a FIFO.
  • chown_restricted
    • returns non-zero if the chown(2) call may not be used on this file. If path refer to a directory, then this applies to all files in that directory.
  • no_trunc
    • returns non-zero if accessing filenames longer than name_max generates an error.
  • vdisable
    • returns non-zero if special character processing can be disabled, where path must refer to a terminal.

Return Value

The limit is returned, if one exists. If name is omitted, a table of all limits is returned.

Examples

for i,j in pairs(posix.pathconf("/dev/tty" )) do
  print(i, j)
end

Will ouput:

pipe_buf        4096
link_max        127
path_max        4096
max_canon       255
chown_restricted        1
no_trunc        1
max_input       255
name_max        255
vdisable        0

References

https://man7.org/linux/man-pages/man3/pathconf.3.html

pipe

TODO

Example

require "posix"
rd, wr = posix.pipe()
wr:write("hello, world\n")
wr:close()
print(rd:read("*all"))
rd:close()

putenv

INPUT

  • STRING-

OUPUT

  • 0 if success, nil if not
require "posix"
posix.putenv("DISPLAY=localhost:0")

readlink

INPUT

  • PATH-path to link

OUPUT

  • 0 if success, nil if failure
require "posix"
posix.readlink("/etc/rc.d/postfix")
--0 if sucess, nil if failed

rmdir

INPUT

  • PATH- path to directory

OUPUT

  • 0 for sucess
  • nil for failure
require "posix"
posix.rmdir("/home/testdir")
-- 0 for success, nil for failure

setgid

INPUT

  • Group
    • Name or GID

OUPUT

  • 0 for sucess
  • nil for failure
require "posix"
posix.setgid("1000")

setlogmask

TODO

setrlimit

TODO

setuid

INPUT

  • User
    • Name or UID

OUPUT

  • 0 for sucess, nil for failure
require "posix"
posix.setuid("1000")
-- 0 for sucess, nil for failure

sleep

INPUT

  • SECONDS

OUPUT

  • 0 for sucess, nil for failure
require "posix"
posix.sleep(5)
-- will sleep for 5 seconds, usually will not fail

stat

INPUT

  • PATH - location of file or direcory
  • Selector -
    • dev
    • type
    • ctime
    • nlink
    • atime
    • uid
    • mtime
    • gid
    • mode
    • ino
    • size

OUPUT

  • If no mode will output as a table with each of the above set
  • If mode is set then will give a string with value
require "posix"
bar = posix.stat("/etc/")
for a,b in pairs(bar) do print(a,b) end
dev     769
type    directory
ctime   1194624026
nlink   113
atime   1194866712
uid     0
mtime   1194624026
gid     0
mode    rwxr-xr-x
ino     4
size    6208

sysconf

INPUT

  • Accept a selector if given anything
    • tzname_max
    • clk_tck
    • stream_max
    • ngroups_max
    • child_max
    • open_max
    • saved_ids
    • job_control
    • version
    • arg_max

OUPUT

  • TABLE - if no selector
  • STRING - if 1 selector
require "posix"
bar = posix.stat()
for a,b in pairs(bar) do print(a,b) end
tzname_max      6
clk_tck 100
stream_max      16
ngroups_max     65536
child_max       999
open_max        1024
saved_ids       1
job_control     1
version 200112
arg_max 131072

strftime

TODO

time

TODO

times

INPUT

    • utime
    • cstime
    • elapsed
    • cutime
    • stime

OUPUT

  • TABLE - if non specified output all values in a table
  • STING - if one of the above is specified string output
require "posix"
bar = posix.times()
for a,b in pairs(bar) do print(a,b) end
--Maybe takes function calls to see how long they run

ttyname

INPUT

  • NONE

OUPUT

  • STRING - what tty am I on
require "posix"
print(posix.ttyname())

umask

INPUT

  • NONE
    • or mode, what to change the umask to

OUPUT

  • STRING - what is the current umask set to
    • or mode, what to change is to
require "posix"
print(posix.umask)
-- rwxr-xr-x
--or change it
posix.umask("a=rwx")
print(posix.umask())
-- rwxrwxrwx

uname

get name and information about current kernel

Synopsis

posix.access([format])

Description

uname() returns the string format with directives prefixed by '%' replaced with specified systrem information. If format is not specified or is nil, then the string "%s %n %r %v %m" will be used.

The format string directives are:

%s - kernel name
%n - network node hostname
%r - kernel release
%v - kernel version
%m - machine hardware name

Return Value

A string with the formatted system information.

Examples

print("Kernel version is: "..posix.uname("%v"))

References

https://man7.org/linux/man-pages/man2/uname.2.html

utime

INPUT

  • Path-location of file or directory
    • atime - access time
    • mtime - modification time

OUPUT

  • 0 for sucess
  • nil for failure
require "posix"
posix.utime("/var/log/test",atime,mtime)

wait

INPUT

  • PID - process id

OUPUT

  • 0 for success
  • nil for failure
require "posix"
posix.wait(10)


If you are using this under linux also get

setenv

INPUT

  • Name- Name of Varible
  • Value- What the Name varible should be set to
    • overwrite- is this overwriting one already set

OUPUT

  • 0 for sucess, nil for failure
require "posix"
posix.setenv("BAR","YES")

unsetenv

INPUT

  • NAME - name of the varible to unset

OUPUT

  • 0 for sucess, nil for failure
require "posix"
posix.unsetenv("BAR")