syscall NUMBER, LIST

调用列表中第一个元素指定的系统调用,并将剩余元素作为参数传递给系统调用。如果未实现,则引发异常。参数的解释如下:如果给定参数是数字,则参数将作为整数传递。如果不是,则传递指向字符串值的指针。您有责任确保字符串预先扩展到足够长,以接收可能写入字符串的任何结果。您不能使用字符串字面量(或其他只读字符串)作为 syscall 的参数,因为 Perl 必须假设任何字符串指针都可能被写入。如果您的整数参数不是字面量并且从未在数字上下文中解释过,您可能需要向它们添加 0 以迫使它们看起来像数字。这模拟了 syswrite 函数(反之亦然)。

require 'syscall.ph';        # may need to run h2ph
my $s = "hi there\n";
syscall(SYS_write(), fileno(STDOUT), $s, length $s);

请注意,Perl 只支持将最多 14 个参数传递给您的系统调用,这在实践中应该(通常)足够。

Syscall 返回其调用的系统调用返回的任何值。如果系统调用失败,syscall 返回 -1 并设置 $!(errno)。请注意,某些系统调用可以合法地返回 -1。处理此类调用的正确方法是在调用之前将 $! = 0 赋值,然后在 syscall 返回 -1 时检查 $! 的值。

syscall(SYS_pipe()) 存在一个问题:它返回它创建的管道读取端的文件号,但没有办法检索另一端的文件号。您可以通过使用 pipe 来避免此问题。

可移植性问题:"perlport 中的 syscall"