|laziness, impatience, and hubris|
|on Aug 24, 1999 at 22:42 UTC||Need Help??|
See the current Perl documentation for syscall.
Here is our local, out-dated (pre-5.6) version:
syscall - execute an arbitrary system call
Calls the system call specified as the first element of the list, passing
the remaining elements as arguments to the system call. If unimplemented,
produces a fatal error. The arguments are interpreted as follows: if a
given argument is numeric, the argument is passed as an int. If not, the
pointer to the string value is passed. You are responsible to make sure a
string is pre-extended long enough to receive any result that might be
written into a string. You can't use a string literal (or other read-only
string) as an argument to syscall()
because Perl has to assume that any string pointer might be written
through. If your integer arguments are not literals and have never been
interpreted in a numeric context, you may need to add
require 'syscall.ph'; # may need to run h2ph $s = "hi there\n"; syscall(&SYS_write, fileno(STDOUT), $s, length $s);
Note that Perl supports passing of up to only 14 arguments to your system call, which in practice should usually suffice.
Syscall returns whatever value returned by the system call it calls. If the
system call fails, syscall() returns
There's a problem with syscall(&SYS_pipe): it returns the file number of the read end of the pipe it creates. There is no way to retrieve the file number of the other end. You can avoid this problem by using pipe() instead.