「ふつうのLinuxプログラミング 第2版」を読んだ

システムコールファイルシステムについての知識が全くなかったので夏休みに読みました。

以下,雑な読書メモと追加情報です。

GCCのバージョン番号

gcc -v でもバージョン番号らしき表示はされるのですが,明らかに --verbose 的な出力だったので,不便だなぁとは思っていました。

gccコマンドラインのオプション引数の書式が無法地帯だった時代を引きずっているようで,こういうのがいくつかあります。

Unix domain socket

p.41 の記述です。リバースプロキシとアプリケーションサーバーをUnix domain socketでつなぐのをISUCONで初手でやっているので気になりました。追加調査をしたいですね。

ディレクトリの実行権限

答えを知らない人はここを読みましょう。

unix.stackexchange.com

askubuntu.com

superuser.com

本で指摘されなかったら永遠に+xの意味を分かっていなかったかもしれません。

バッファリングモード

std::endl は毎回 flush() が呼ばれてしまうので \n を使ったほうが速い」みたいな話がありましたが,ちゃんと計測し直したほうが良いかもしれません。

stdio

open/close で fd を使った操作をしていると「じゃあFILEって何だ…?」という疑問が湧いてくるのですが,その答えが載っていて助かりました。

とはいえ,普段の操作では fopen() からの fileno() で fd を取得するほうが安全かもしれません。

getc/putc はマクロで実装されていて fgetc/fpuc は関数で実装されているという違いがあるそうです。

Filesystem Hierarchy Standard

どういうファイルはどの場所に置けばよいかがわかりやすく書かれていてよいです。

「shareって何を共有しているんだろう…?」というのは長年の謎でした。

ハードリンク

superuser.com

ハードリンクを使うことがほとんど無いので役に立つかはわかりませんが…

シンボリックリンク

シンボリックリンクはパス(つまりシンボル)だけを持っているリンクなので,存在しないパスへのリンクを作ることもできるし,指しているファイルやディレクトリが消えても残り続ける。

実行ファイル

稀に gcc -S でアセンブリを見ることがあるのですが,「.text ってなんだろう… 実行される処理が書いてあるっぽいのにな…」 とずっと思っていました。

いつか使うことがあるかもしれません。

fork

よく知らずに使っていました。

dup/dup2

signal

これは覚えられる気がしないです。

credential

必要になったことが今まで無かったのでよくわかりませんでした。

ネットワーク

manかどこかに書かれているはずなんだけどな〜 と思っていたのですが,まさかetcに置いてあるとは…