「ふつうのLinuxプログラミング 第2版」を読んだ
ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/09/22
- メディア: 単行本
- この商品を含むブログを見る
システムコールやファイルシステムについての知識が全くなかったので夏休みに読みました。
以下,雑な読書メモと追加情報です。
GCCのバージョン番号
gccのバージョンを取るのは -v ではなく -dumpversion
— しょラー (@shora_kujira16) 2018年8月10日
gcc -v
でもバージョン番号らしき表示はされるのですが,明らかに --verbose
的な出力だったので,不便だなぁとは思っていました。
gccはコマンドラインのオプション引数の書式が無法地帯だった時代を引きずっているようで,こういうのがいくつかあります。
Unix domain socket
UNIX domain socket が TCP socket で代替できると書いてあるけど、僕がこれまで見聞きしてきた効率云々の話はどうなったんだろう…
— しょラー (@shora_kujira16) 2018年8月10日
p.41 の記述です。リバースプロキシとアプリケーションサーバーをUnix domain socketでつなぐのをISUCONで初手でやっているので気になりました。追加調査をしたいですね。
ディレクトリの実行権限
ディレクトリに付与する実行権限の意味がよく分かっていなかった(雰囲気だけでLinuxを使っている)
— しょラー (@shora_kujira16) 2018年8月11日
答えを知らない人はここを読みましょう。
本で指摘されなかったら永遠に+xの意味を分かっていなかったかもしれません。
バッファリングモード
stdioのバッファリングモードとかsetvbufとかの話題,全く知らなかった(今まで適当なこと言ってたかも)
— しょラー (@shora_kujira16) 2018年8月11日
「std::endl
は毎回 flush() が呼ばれてしまうので \n
を使ったほうが速い」みたいな話がありましたが,ちゃんと計測し直したほうが良いかもしれません。
stdio
FILE の中身は fd とバッファ
— しょラー (@shora_kujira16) 2018年8月11日
open/close で fd を使った操作をしていると「じゃあFILEって何だ…?」という疑問が湧いてくるのですが,その答えが載っていて助かりました。
表6.2 fopen(3)の第二引数と対応するopen(2)のmode,これはほしかった
— しょラー (@shora_kujira16) 2018年8月11日
とはいえ,普段の操作では fopen() からの fileno() で fd を取得するほうが安全かもしれません。
fgetc/fputc と getc/putc の違いは知らなかった(なにこれ〜?くらいの認識だった)
— しょラー (@shora_kujira16) 2018年8月11日
getc/putc はマクロで実装されていて fgetc/fpuc は関数で実装されているという違いがあるそうです。
Filesystem Hierarchy Standard
/usr には複数のマシンで共有可能なファイルを置く
— しょラー (@shora_kujira16) 2018年8月13日
どういうファイルはどの場所に置けばよいかがわかりやすく書かれていてよいです。
/usr/share はアーキテクチャ非依存
— しょラー (@shora_kujira16) 2018年8月13日
「shareって何を共有しているんだろう…?」というのは長年の謎でした。
ハードリンク
ls -l でハードリンクの数が見れるというのは知らない情報だった
— しょラー (@shora_kujira16) 2018年8月10日
ハードリンクを使うことがほとんど無いので役に立つかはわかりませんが…
シンボリックリンク
ln -s の source って存在しないパスを指定してもいいのか
— しょラー (@shora_kujira16) 2018年8月13日
シンボリックリンクはパス(つまりシンボル)だけを持っているリンクなので,存在しないパスへのリンクを作ることもできるし,指しているファイルやディレクトリが消えても残り続ける。
ディレクトリにハードリンクを作れない理由がわからない
— しょラー (@shora_kujira16) 2018年8月13日
Why are hard links to directories not allowed in UNIX/Linux? https://t.co/LGdE3a4G7i
— しょラー (@shora_kujira16) 2018年8月13日
1. ファイルシステムにループができてやばい
— しょラー (@shora_kujira16) 2018年8月13日
2. cd .. が一意に決まらない
などなどの問題があるとのこと
実行ファイル
「テキスト領域とは,機械語のプログラムのことです。『テキストファイル』のテキストとはまったく関係ありません」 (p.242)
— しょラー (@shora_kujira16) 2018年8月13日
なるほどね
稀に gcc -S でアセンブリを見ることがあるのですが,「.text
ってなんだろう… 実行される処理が書いてあるっぽいのにな…」 とずっと思っていました。
実行ファイルがdynamic linkしている共有ライブラリはlddで見れる。fileでも見れる
— しょラー (@shora_kujira16) 2018年8月13日
cat /proc/<pid>/maps でメモリ配置が見れる
— しょラー (@shora_kujira16) 2018年8月13日
いつか使うことがあるかもしれません。
fork
fork() で複製したプロセスはストリームもすべて複製する(よく知らずに使ってた)https://t.co/n1g3fXqLb9
— しょラー (@shora_kujira16) 2018年8月13日
よく知らずに使っていました。
dup/dup2
dupとdup2についてはこの図がわかりやすい https://t.co/jJNXZe1iSW
— しょラー (@shora_kujira16) 2018年8月13日
signal
signalまわりのAPIは難しすぎるのでコピペしないと無理だな…
— しょラー (@shora_kujira16) 2018年8月13日
これは覚えられる気がしないです。
credential
クレデンシャル周りまったくわからんぞ…
— しょラー (@shora_kujira16) 2018年8月13日
必要になったことが今まで無かったのでよくわかりませんでした。
ネットワーク
/etc/services に well-known port が書かれてるらしい…まじか〜
— しょラー (@shora_kujira16) 2018年8月13日
manかどこかに書かれているはずなんだけどな〜 と思っていたのですが,まさかetcに置いてあるとは…
ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/09/22
- メディア: 単行本
- この商品を含むブログを見る