Linux の system(3) の返り値がよくわからない

anarchy golf - exit status をやってみようかと思って、取りあえず system の man を読む。すると

execve() が /bin/sh を呼び出すのに失敗した時には 127 を、別のエラーがあった時には -1 を、それ以外の時はコマンドの返り値を返す。
string の値が NULL のときは、 system() はシェルが利用可 能ならゼロ以外の値を返し、利用不可ならゼロを返す。
system() は他の子プロセスのウエイトステータスには影響を与えない。

と書いてあるので、system("false") は 1、system("exit 255") は 255 を返すのかと思たのだけど、実際はそれを 256 倍した値が返ってくる。なんでだろう。
ググった。

エラーが発生した場合は (fork に失敗した場合など)、-1 を返す。そうでなければ、コマンドのステータスを返す。後者の場合、ステータスは wait(2) で定義されているフォーマットで返ってくる。従って、コマンドの終了コードは WEXITSTATUS(status) で得ることが出来る。 /bin/sh が実行出来なかった場合、終了ステータスはコマンドが exit (127) を実行した場合と同じになる。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html

WEXITSTATUS は長いのでコードゴルフにはちょっと。

積ん読が 4 ヶ月分相当に

最近読んだ本の感想

魔群の通過

幕末無惨デスマーチ。面白いです。一気に読んだ。

  • おゆんさんが弁護していたけどやっぱり田沼玄蕃守はひどいと思った。賞罰の与えかたとか。
  • はてなマップ化したくなったのだけど、作者の山田風太郎がこの行軍の凄まじさは実際に路程を見てみなければわからないというようなことを書いている。わかった気にならないようにします。

ノンセクシュアル

バイセクシャルレズビアンがごく普通に登場したり、コミュニケーションのすれ違いが描写されていたりするので、はてなの人たちに好まれそうだなと思います。

だってみんながやっていたから

http://q.hatena.ne.jp/./1172426828 より。ネットの恥はかき捨てという諺に従って恥ずかしながら書いてみます。単文と書いてあったので 1 文で。
風邪と風邪薬でちょっと朦朧とした状態で喫茶店に入ってウエイトレスにコーヒーのつもりで「これを下さい」と指を差して注文したら、ミルクコーヒーだかミルクティーだかよくわからないものが出されて、飲んではみたものの風邪で味覚と嗅覚がおかしくなっているせいでどちらだか区別がつかず、さりとて今日は重要な仕事があるのでどうしてもコーヒーで目を覚ましておきたいのだがどうしたものかと考え、ウエイトレスに「私が注文したのが紅茶だったらコーヒーと替えてもらえませんか」と頼んだら替えてくれたのでどうも最初に出てきたのは紅茶だったらしい。


  • 解説が必要なほど難しいことは書けません。
  • ありがちかも。
  • 単文とは主語と述語が一つずつの文のことだから、この文章は思いっきり複文です。
    • そもそも短文の誤記であると lionfan さん自身が認めている。
  • コーヒーより紅茶の方がカフェインが多いらしい。