Advanced Linux Programming Ch.2

Advanced Linux Programmingを流し読み。次はChapter 2 - Writing Good GNU/Linux Software。知ってるところは簡単に。知らなかったところは詳しめに。

  • 引数はargc, argvで出る( main(int, char**)なら名前は何でもよかった気がするが)
  • GNU/Linux Command-line conventions
    • 短いオプションは -x のように、ハイフンひとつに文字ひとつの形。短いので打ちやすい。
    • 長いオプションは --hoge のように、ハイフンひとつに単語ひとつの形。単語なので意味がわかりやすく覚えやすい。
  • getopt_long使うと引数が構造体で定義できて便利(サンプル付き)
  • printf + fflush(stdout) = fprintf
  • exit code 0が正常、1その他値があると異常
  • 環境変数
    • USER, HOME, PATH, DISPLAYなど
    • extern char** environ;
    • getenv(3)
  • temporary files
    • mkstemp(3) "tempfile.txt.XXXXXX"などを引数にして呼び出すとuniqueな6文字にしたファイルディスクリプタを返してくれる
    • tmpfile(3) 適当なテンポラリファイルのファイルポインタを作って返してくれる
  • Coding Defensively
    • assert(3) -DNDEBUGでコンパイルするとassertマクロが全部なくなって実用コードになる(便利やん)
  • システムコールがコケるとき
  • perror = puts( strerror (errno) )
  • EXXXXXみたいなのがいろいろある(記述は長いけど面倒なので略)
  • libhoge.aとかarの使い方
  • shared libraries
    • -fPICでコンパイルしておくこと
    • PIC =Position-Independent Code
    • LD_LIBRARY_PATHなど
    • 共有ライブラリに依存関係があるときはstaticリンクができない
    • pros and cons 軽くなるし、共有部分を一箇所にまとめられて変更は簡単になるけど変更のリスクも大きくなる、みたいな
    • dlopen, dlsym, dlcloseの使い方

TOC (original)

  1. Advanced Unix Programming with Linux
  2. Writing Good GNU/Linux Software