调用列表中第一个元素指定的系统调用,并将剩余元素作为参数传递给系统调用。如果未实现,则引发异常。参数的解释如下:如果给定参数是数字,则参数将作为整数传递。如果不是,则传递指向字符串值的指针。您有责任确保字符串预先扩展到足够长,以接收可能写入字符串的任何结果。您不能使用字符串字面量(或其他只读字符串)作为 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"。