LuaPosix

From Alpine Linux
Revision as of 20:23, 12 November 2007 by Ms13sp (talk | contribs) (→‎setgid)

Lua Posix

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

http://swoolley.org/man.cgi/access

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

INPUT

  • PATH - where is the file or directory
    • MODE - what mode to you want to change on the file

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

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.

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

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

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

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())

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

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

Hard Links INPUT

  • Oldpath-
  • Newpath-

'OUTPUT If you want output 0 sucess, nil errors

bar = require "posix"
bobo = bar.link("/etc/passwd", "testfile")
-- 0 for success, nil for errors

mkdir

INPUT

  • PATH-path to new dir

OUTPUT If you are looking for output-

  • 0 for success
  • nil for failure
bar = require "posix"
bar.mkdir("/home/user/bobo")
--set the above to a variable to get output

mkfifo

INPUT

  • PATH- where to make the fifo

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

http://swoolley.org/man.cgi/pathconf

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")

setuid

sleep

stat

symlink

sysconf

times

ttyname

umask

uname

utime

wait


If you are using this under linux also get

setenv

unsetenv