syscall LIST
LIST
の最初の要素で指定するシステムコールを、2番目以降の要素を引数として渡して実行します。syscall
システムコールが実装されていないときには、致命的エラーとなります。引数が数字であれば、整数として引数を渡します。そうでなければ、文字列値へのポインタが渡されます。
syscallの使い方
以下はsyswrite
関数(あるいはその逆)をエミュレートします。
require 'syscall.ph'; syscall(&SYS_write, fileno(STDOUT), $s, length $s);
syscall
は、呼び出したシステムコールが返した値を返します。システムコールが失敗すると、syscall
は -1 を返し、 $!(errno)
を設定します。システムコールが正常に -1 を返す場合があることに注意してください。このようなシステムコールを正しく扱うには、$!=0;
をシステムコールの前に実行し、syscall
が -1 を返した時には$!
の値を調べてください。
syscall(&SYS_pipe)
には問題があります。これはパイプの読み出し側が作ったファイル番号を返します。相手側のファイル番号を得る方法がありません。この問題を避けるためには、代わりにpipe
を使ってください。