syscall NUMBER, LIST

呼叫清單第一個元素指定的系統呼叫,將其餘元素傳遞為系統呼叫的引數。如果未實作,則會引發例外。引數的詮釋方式如下:如果給定的引數是數字,則該引數會傳遞為 int。如果不是,則會傳遞指向字串值的指標。您有責任確保字串已預先擴充足夠長度,以接收可能會寫入字串的任何結果。您不能使用字串文字 (或其他唯讀字串) 作為 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 會傳回它呼叫的系統呼叫傳回的任何值。如果系統呼叫失敗,syscall 會傳回 -1 並設定 $! (errno)。請注意,某些系統呼叫可以合法地傳回 -1。處理此類呼叫的正確方式是在呼叫之前將 $! = 0 指定給它,然後在 syscall 傳回 -1 時檢查 $! 的值。

syscall(SYS_pipe()) 有個問題:它會傳回它建立的管道的讀取端檔案編號,但無法擷取另一端的檔案編號。您可以改用 pipe 來避免這個問題。

移植性問題:perlport 中的「syscall」