Unixの歴史:8進数の戻りコード?


10

今日、私は油断したgdb

Program exited with code 0146.

gdb戻りコードを8進数で出力します。私が見つけた理由を調べます:http : //comments.gmane.org/gmane.comp.gdb.devel/30363

しかし、それは特に満足のいく答えではありません。一部のグーグル検索では履歴が明らかにされなかったため、SOの誰かが裏話を知っていることを望んでいました。

やや関連する質問ですが、リターンコードを8進数で表示するにはどうすればよいでしょうか。おそらく古いマシンは常に戻りコードを出力しましたか?

$ printf %o\\n $?

かなり厄介です:)


これ$?は、戻りコードのシェルの値で、10進数です(またはgdbは、例のコマンドもサポートしていますか?)。gdbがそれを8進数で報告する理由がわかりません。私の解決策はman ascii、8進数の値が何を意味するかを確認するために 'ol を取り出します。他のプログラムからも8進数値に遭遇するので、興味深い質問です。たぶん、それはカーニハンとパイクの「Unixプログラミング環境」で議論されています。幸運を。
シェルター、

終了ステータスは数字よりも大きくなることがありますが、実際にはバイトです。また、man ascii8進数を10進数に変換しても意味がありません。bcより良い選択でしょう。
jlliagre

2
戻りコードは数値であり、10進数または8進ではありません。プログラムはステータス(1バイト)を返します。wait(3)またはその部族を使用すると、親プロセスはプロセスが終了した理由に関する多くの情報を見つけることができます(通常、exit(2)を呼び出して自発的に、シグナルによって
強制

回答:


6

8進数表現は、最も一般的に使用される小さい値の終了コードの解釈を容易にします。バイトであるこの数値が10進数で出力された場合、プロセスを中断した信号を見つけるには、8進数では少し計算が必要になりますが、そのまま読み取ることができます。

  • 状態5でプロセスが終了すると、gdbディスプレイ05違いはありません
  • SIGINTControl+ C)を取得したため、プロセスは終了します。これは、#よりもシグナル#2として認識しやすいgdb表示0202です130

さらに、終了ステータスもビットマスクである可能性があり、そのような場合、8進数(少なくとも最近では数十年前に一般的であったものに慣れている場合)は、10進数よりも精神的にビットに変換する方が簡単ですたとえば、16進数も、chmodファイルのアクセス許可を表す8進数を受け入れます0750 = 111 101 000 = rwx r-x ---


これを尋ねるのはおそらく間違った場所ですが、GDBによって与えられた数値が8進数か10進数かを判別する簡単な方法はありますか?
マリナーラ

3
規則は、ゼロ(0)で始まる場合は8進数です。
jlliagre

3

私はこのテキストのコピーを持っていませんが、Googleブックで利用できる短い宣伝文を読んでいますが。X / Open移植性ガイドによると、System V仕様のコマンドとユーティリティpg 283(Googleブックによる)

アプリケーションが異常終了した場合、その終了ステータスは8進数の0200 +ステータスであり、一般的な「ステータス」値のリストがあります(これらはおそらく8進数でも表示されます)。

ですから、それは貧しい人々のエラーメッセージです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.