From: <slf...@us...> - 2003-04-22 07:41:42
|
Update of /cvsroot/jungerl/jungerl/lib/posix_drv In directory sc8-pr-cvs1:/tmp/cvs-serv1281/posix_drv Added Files: LICENSE Makefile README Log Message: Initial checkin of a small driver for POSIX system calls and C library functions that the Erlang runtime system doesn't support out-of-the-box. --- NEW FILE: LICENSE --- Copyright (c) 2003, Scott Lystig Fritchie, <slf...@sn...> All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Mr. Fritchie nor the names of any other contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- NEW FILE: Makefile --- include ../../support/subdir.mk --- NEW FILE: README --- This is skeleton documentation for a small but usable driver for POSIX system calls and C library functions that the Erlang runtime doesn't support out-of-the-box. It supports the following: getegid geteuid getgid getgrgid getgrnam getgroups getlogin getpgrp getppid getpwnam getpwuid getsid getuid kill lstat mkfifo mknod umask This driver was automatically generated by the Erlang Driver Toolkit, http://www.snookles.com/erlang/edtk/. See the file "priv/posix.xml" for the config file used to create the driver. If you find bugs or portability problems with this driver, please contact me via email at slfritchie /at\ snookles {dot} com so I can fix both this driver and the EDTK code generator! See the file "LICENSE" in this directory for the licensing terms for this software. A demo of all supported functions can be found in the cut-and-paste of an interactive shell session at the end of this README. In almost all cases, the driver will return a tuple of {ok, Stuff} or {error, Stuff}. In the error case, Stuff is typically the systems "errno" value. The "test" directory contains a regression test program. It contains additional hints and examples of using the driver. NOTE: The posix_drv:start/0 function is expecting to find the posix_drv.so shared library somewhere in the BEAM virtual machine's code path. Therefore, you need to use the "-pa /path/to/dir" or "-pz /path/to/dir" on the "erl" command line, otherwise you'll get an error like the following: Erlang (BEAM) emulator version 5.2.3.3 [source] [threads:0] Eshell V5.2.3.3 (abort with ^G) 1> posix_drv:start(). Error: posix_drv.so not found in code path =ERROR REPORT==== 22-Apr-2003::02:31:21 === Error in process <0.26.0> with exit value: {{badmatch,{error,enoent}},[{posix_drv,start,0},{erl_eval,expr,3},{erl_eval,exprs,4},{shell,eval_loop,2}]} ** exited: {{badmatch,{error,enoent}}, [{posix_drv,start,0}, {erl_eval,expr,3}, {erl_eval,exprs,4}, {shell,eval_loop,2}]} ** --- usage demo --- usage demo --- usage demo --- usage demo --- usage demo --- % ./bin/jerl Erlang (BEAM) emulator version 5.2.3.3 [source] [threads:0] Eshell V5.2.3.3 (abort with ^G) 1> {ok, P} = posix_drv:start(). {ok,#Port<0.29>} 2> posix_drv:getg getgid/1 getgrgid/2 getgrnam/2 getgroups/1 2> posix_drv:getgid(P). {ok,20} 3> posix_drv:getegid(P). {ok,20} 4> posix_drv:getgrnam(P, "wheel"). {ok,{group,<<119,104,101,101,108>>, <<42>>, 0, <<10,160,68,8,15,160,68,8>>}} 5> posix_drv:getgrgid(P, 0). {ok,{group,<<119,104,101,101,108>>, <<42>>, 0, <<10,160,68,8,15,160,68,8>>}} 6> posix_drv:getgroups(P). {ok,{3,[20,20,0]}} 7> ^Z Suspended % id uid=100(fritchie) gid=20(staff) groups=20(staff), 0(wheel) % grep wheel /etc/group wheel:*:0:root,fritchie % fg ./bin/jerl 7> posix_drv:getpwnam(P, "fritchie"). {ok,{passwd,<<102,114,105,116,99,104,105,101>>, <<42>>, 100, 20, <<83,99,111,116,116,32,76,121,115,116,105,103,32,70,114,105,116,99,104,105,...>>, <<47,117,115,101,114,47,102,114,105,116,99,104,105,101>>, <<47,98,105,110,47,99,115,104>>}} 8> posix_drv:getpwuid(P, 0). {ok,{passwd,<<114,111,111,116>>, <<42>>, 0, 0, <<67,104,97,114,108,105,101,32,38>>, <<47,114,111,111,116>>, <<47,98,105,110,47,99,115,104>>}} 9> ^Z Suspended % grep fritchie /etc/passwd fritchie:*:100:20:Scott Lystig Fritchie:/user/fritchie:/bin/csh % grep root /etc/passwd root:*:0:0:Charlie &:/root:/bin/csh % fg ./bin/jerl 9> posix_drv:getuid(P). {ok,100} 10> posix_drv:geteuid(P). {ok,100} 11> posix_drv:getlogin(P). {ok,<<102,114,105,116,99,104,105,101>>} 12> posix_drv:getpgrp(P). {ok,24844} 13> posix_drv:getppid(P). {ok,24844} 14> posix_drv:getsid(P). {ok,22532} 15> posix_drv:kill(P, 88888, 15). {error,3} 16> os:getpid(). "24845" 17> posix_drv:kill(P, 24845, 0). {ok,0} 18> posix_drv:lstat(P, "/"). {ok,{stat,1030, 2, 16877, 18, 0, 0, 1504, {1050963494,0}, {1050600129,0}, {1050600129,0}, 512, 4, 4096}} 19> posix_drv:mkfifo(P, "/tmp/fifo0", 8#644). {ok,0} 20> posix_drv:mknod(P, "/tmp/i-am-not-root", 8#644, 0). {error,1} 21> posix_drv:umask(P, 8#022). {ok,18} 22> q(). ok 23> % ls -lLd / drwxr-xr-x 18 root wheel 512 Apr 17 12:22 / % ls -l /tmp/fifo0 prw-r--r-- 1 fritchie wheel 0 Apr 22 02:16 /tmp/fifo0 |