0

これに出くわしたとき、私はperlvarを読んでいました-

最後のパイプ クローズ、バックティック (`` ) コマンド、wait() または waitpid() の呼び出しの成功、または system() オペレーターから返されたステータス。これは、従来の Unix の wait() システム コールによって返される 16 ビットのステータス ワードです (または、そのように見えるように構成されています)。したがって、サブプロセスの終了値は実際には ($?>> 8 ) であり、$? & 127 はどの信号を与えるか

16 ビット ステータス ワードとは何ですか? '$?>> 8' という操作は何を意味しますか? '512' のような 16 ビット ワードは、'$?>> 8' を実行した後、どのように '2' に変換されるのでしょうか?

4

2 に答える 2

3

16 ビット値は、16 バイナリ ビットで格納できる値です。16 進数では0FFFFまたは 10 進数では 65,535 です。

16 ビットのステータス ワードはwait、プロセスの終了ステータスを左側 (最上位) の 8 ビットに結合する Unix 呼び出しによって提供される値であり、終了したプロセスのコア ダンプが生成されたかどうかを示す単一のビットと、右側 (最下位) の 7 ビットで終了させた信号の番号 (存在する場合)。

通常、終了ステータスのゼロ値はプロセスが成功したことを示し、ゼロ以外の値は何らかの失敗または情報状態を示します。

$? >> 8値を 8 ビット右にシフトし、右側 (最下位) の 8 ビット (つまり、コア ダンプ ビットとシグナル番号) を失い、左側の 8 ビット (終了ステータス) を残すことを示します。これは、2 8または 256 で割ることと同じです。

は2 8または 256 で$? >> 8割ることに等しいので、が 512 の場合は 512 / 256 であり、終了ステータスは 2 になります。$?$?$? >> 8

于 2013-04-26T18:49:27.020 に答える