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 は長いのでコードゴルフにはちょっと。
ゴミ屋敷問題の報道がやけに細かい件についての陰謀論
「公共の福祉は個人の嗜好より優先する」ということを視聴者に刷りこみたいのではないだろうか。
だってみんながやっていたから
http://q.hatena.ne.jp/./1172426828 より。ネットの恥はかき捨てという諺に従って恥ずかしながら書いてみます。単文と書いてあったので 1 文で。
風邪と風邪薬でちょっと朦朧とした状態で喫茶店に入ってウエイトレスにコーヒーのつもりで「これを下さい」と指を差して注文したら、ミルクコーヒーだかミルクティーだかよくわからないものが出されて、飲んではみたものの風邪で味覚と嗅覚がおかしくなっているせいでどちらだか区別がつかず、さりとて今日は重要な仕事があるのでどうしてもコーヒーで目を覚ましておきたいのだがどうしたものかと考え、ウエイトレスに「私が注文したのが紅茶だったらコーヒーと替えてもらえませんか」と頼んだら替えてくれたのでどうも最初に出てきたのは紅茶だったらしい。
- 解説が必要なほど難しいことは書けません。
- ありがちかも。
- 単文とは主語と述語が一つずつの文のことだから、この文章は思いっきり複文です。
- そもそも短文の誤記であると lionfan さん自身が認めている。
- コーヒーより紅茶の方がカフェインが多いらしい。