SOCKETにMSGを送ります。FLAGSには、同名のシステムコールと同じフラグを指定します。接続していないソケットには、送信先TOを指定しなければならず、この場合、Cのsendtoを実行します。送信した文字数か、エラー時には、未定義値を返します。
2011年9月20日
by リズムファクトリー
0 comments
2011年9月20日
by リズムファクトリー
0 comments
SOCKETにMSGを送ります。FLAGSには、同名のシステムコールと同じフラグを指定します。接続していないソケットには、送信先TOを指定しなければならず、この場合、Cのsendtoを実行します。送信した文字数か、エラー時には、未定義値を返します。
2011年9月20日
by リズムファクトリー
0 comments
シグナルを送信や、待ち合わせなどのセマフォ操作を行なうために、System V IPC関数semopを呼び出します。
OPSTRINGは、semop構造体のpackされた配列でなければなりません。semop構造体は、それぞれ、pack("sss", $semnum, $semop, $semflag)のように作ることができます。セマフォ操作の数は、OPSTRINGの長さからわかります。成功時には真を、エラー時には偽を返します。
$semop = pack("sss", $semnum, -1, 0);
die "Semaphore trouble: $!\n" unless semop($semid, $semop);
上記は、セマフォ ID$semidのセマフォ$semnumで待ち合わせを行ないます。セマフォにシグナルを送るには、"-1"を "1" に変更してください。
2011年9月20日
by リズムファクトリー
0 comments
System V IPC関数semgetを呼び出します。セマフォID か、エラー時には未定義値を返します。
2011年9月20日
by リズムファクトリー
0 comments
System V IPC関数semctlを呼び出します。CMDが、&IPC_STATか&GETALLのときには、ARGは、返されるsemid_ds構造体か、セマフォ値の配列を納める変数でなければなりません。ioctl と同じように、エラー時には未定義値、ゼロのときは"0 but true"、それ以外なら、その値そのものを返します。
2011年9月20日
by リズムファクトリー
0 comments
指定したファイル記述子のうち、どれが入出力操作が可能になっているのか、またはどれが例外状態にあるかを調べるものです。selectシステムコールを実行します。
ファイル記述子については用語集「ファイル記述子」を参照してください。
ビットマスクは、filenoとvecを使って、次のようにして作成することができます。
$rin = $win = $ein = ''; vec($rin,fileno(STDIN),1) = 1; vec($win,fileno(STDOUT),1) = 1; $ein = $rin | $win;
複数のファイルハンドルにselectを行ないたいのであれば、次のようなサブルーチンを書くとよいでしょう。
sub fhbits {
local(@fhlist) = split(' ',$_[0]);
local($bits);
for (@fhlist) {
vec($bits,fileno($_),1) = 1;
}
$bits;
}
$rin = &fhbits('STDIN TTY SOCK');
通常は、次のように使います。
($nfound,$timeleft) = select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
いずれかの準備が整うまでブロックするには、次のようにします。
$nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);
どのビットマスクにもundefを設定することができます。TIMEOUTを指定するときは、秒数で指定し、少数でかまいません。
250 ミリ秒のsleepと同じ効果が、次のようにして得られます。
select(undef, undef, undef, 0.25);
2011年9月20日
by リズムファクトリー
0 comments
2011年9月20日
by リズムファクトリー
0 comments
seekを使えば、ファイルの任意のレコードにアクセスできます。この関数は、FILEHANDLEのOFFSET位置にファイルポインタをセットします。成功すると 1、失敗すると 0 を返します。
| WHENCE | 意味 |
|---|---|
| 0 | ファイルの先頭 |
| 1 | 現在の位置 |
| 2 | ファイルの末尾 |
open (FH, $log); # ファイルの末尾に移動 seek(FH, 2, 0);
for ( ;; ){
while ( <LOG> ){
...
}
sleep 15;
seek LOG, 0, 1;
}
プロセスについては用語集「プロセス」を参照してください。
2011年9月20日
by リズムファクトリー
0 comments
引数を強制的にスカラコンテキストで解釈して、その値を返します。
@list = ("a", "b", "c", "d", "e");
print scalar @list;
> 5
2011年9月20日
by リズムファクトリー
0 comments
検索文字PATTERNを使ってパターンを検索し、もし見つかれば、置換文字REPLACEで置き換え、置換した数を返します。見つからなければ、"偽"を返します。
=~演算子などによって文字列が指定されていなければ、$_が使われます。
スラッシュ( / )の区切り文字以外にも、英数字、空白ではない任意の文字が使えます。シングルクォート( ` )を使うと置換文字列での展開はされません。バッククォートを使うと、置換文字列をコマンドとして実行して、その出力が実際の置換文字列に使われます。PATTERNをカッコ類で括った場合には、REPLACE用にもう一組の区切り文字を用意します。
# スラッシュ( / )以外の区切り文字を使う $path =~ s|/usr/bin|/usr/local/bin|; # カッコ類も可 $path =~ s(/usr/bin)(/usr/local/bin);
PATTERNやREPLACEの文字列に変数を含めると、文字列として展開されます。
$num = '[0-9]+'; $str = "test 1 2 3"; $str =~ s/$num//gxo; print $str, "\n"; > test
gオプションを使って繰り返し置換
s/<[^>]+>/ /g;
置換した値を他の変数に代入
$str = "if you aint runnin game.\n"; ($str2 = $str) =~ s/aint/are not/; print $str, $str2; > if you aint runnin game. > if you are not runnin game.
マッチしたパターンの順番を入れ替える
$str = "back Looking"; $str =~ s/([^ ]*) *([^ ]*)/$2 $1/; # 最初の 2 語の入れ替え print $str, "\n";s > Looking back
| オプション | 意味 |
|---|---|
| e | 式の右側の評価を行なう |
| ee | 式の右側の評価を行い、実行後の返却値を再度評価する |
| g | 繰り返し置換 |
| i | 大文字、小文字を区別しないで検索 |
| m | 文字列を複数行として扱う |
| o | パターンのコンパイルを 1 度だけにする |
| s | ワイルドカードのドット( . )が改行にもマッチするようにする |
| x | 拡張正規表現を使用する |
e オプションは置換文字列を式として解釈し、evalします。
s/\d+/sprintf("%02d",$&)/e; # マッチした文字列を sprintf で整形
s/^=(\w+)/&func($1)/e; # サブルーチン呼び出しを使う
その他のオプションについては m// 演算子を参照してください。
2011年9月20日
by リズムファクトリー
0 comments
FILENAMEで指定したディレクトリが空であれば、そのディレクトリを削除します。
成功時には 1 を返します。失敗時には 0 を返し、$!を設定します。
# /hotm/httpd/html/test ディレクトリの削除 rmdir "/hotm/httpd/html/test" or die "Can't remove dir $!\n";