syscall
LIST
This function calls the system call specified as the first element of the list, passing the remaining elements as arguments to the system call. (Many of these are now more readily available through the POSIX module, and others.) The function produces a fatal error if syscall (2) is unimplemented. The arguments are interpreted as follows: if a given argument is numeric, the argument is passed as a C integer. If not, a pointer to the string value is passed. You are responsible for making sure the string is long enough to receive any result that might be written into it. Otherwise you're looking at a coredump. If your integer arguments are not literals and have never been interpreted in a numeric context, you may need to add 0 to them to force them to look like numbers. (See the following example.)
This example calls the setgroups (2) system call to add to the group list of the current process. (It will only work on machines that support multiple group membership.)
require 'syscall.ph'; syscall &SYS_setgroups, @groups+0, pack("i*", @groups);
Note that you may have to run
h2ph
as indicated in the Perl installation instructions for
syscall.ph
to exist. Some systems may require a
pack
template of
"s*"
instead. Best of all, the
syscall
function assumes the size equivalence of the C types
int
,
long
, and
char
*.
Try not to think of syscall as the epitome of portability.