5部 関数リファレンス

syscall

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を使ってください。

関連記事