C言語によるスーパーLinuxプログラミング

第I部 基礎編:実践的Cプログラミングの学習


第1章 なぜいまCなのか?


第2章 Ubuntuが提供する学習環境

  • パッケージ管理システム
    • Red Hat系 rpm形式 / Debian系 deb形式 / FreeBSD ports形式 / Soralis pkg形式
    • Ubuntuパッケージ管理用コマンド
      • dpkg / apt-get / aptitude
    • 管理ソフトウェア Synaptic

第3章 大規模プログラミングとライブラリーの利用

  • ヘッダーファイルをCとC++兼用する記述例
    • C++からC言語のコードを利用する時には、C言語の関数を明示するために、extern "C" { ... } で囲む必要がある。
/* Guard C code in headers, while including them from C++ */
#ifdef __cplusplus
#  define G_BEGIN_DECLS  extern "C" {
#  define G_END_DECLS    }
#else
#  define G_BEGIN_DECLS
#  define G_END_DECLS
#endif

第4章 プログラミングの移植性

  • 事前定義済みマクロの一覧
    • $echo | cpp -dM
  • Autotoolset さまざまな環境に対応したビルド手順を簡単にする
    • ./configure -> make -> make install フローを作成
      • configureスクリプトがソフトウェアを構築する環境情報を自動で集め、その環境にあったMakefileを作成
    • aclocal, autoheader, autoconf, automake ツール使用
  • CMakeツール
    • WindowsやMacOSXもサポート

第5章 ライブラリの特徴と活用時の注意点

  • 静的リンクと動的リンク
    • 静的リンク・ライブラリ
      • *.a
    • 共有ライブラリ
      • *.so
    • gccで静的リンク利用
      • ビルド時に-staticオプションを使用
        • $gcc pgm.c -o pgm -static
    • 動的リンク
      • プログラム実行直前に、ld.soまたはld-linux.soという動的リンカにより、ライブラリへリンクされ実行可能にする。
    • 動的ローディング
      • 動的リンクの特殊ケース
      • 次の手順で実現
        • dlopen()で対象とするオブジェクトファイルを開く
        • dlsym()でそのから実行したい関数へのポインタを習得
        • その関数ポインタで示されるコードを呼び出す
  • ライブラリ利用時の落とし穴
    • API変更
      • 実行時にリンクする共有ライブラリで後方互換性を確保するため、sonameという仕組みが用意
      • ライブラリーをアップデートした時に、sonameの仕組みを活かして整合性を保つには、管理者権限でldonfigを実行
    • ライブラリーで使用できるシンボルはnmコマンドで確認可能

第II部 活用編:さまざまなライブラリーを利用したプログラミング


第6章 オプション解析

第7章 データの取扱い

第8章 データベース・アプリケーション

第9章 ネットワーク

第10章 科学技術計算

第11章 画像データ処理

第12章 GUIプログラミング

第13章 コンピュータグラフィックス

第14章 デバイスのアクセス

第15章 エンコードとデコード、文字列の解釈

第16章 テスト手法



第III部 実践編:プログラミング開発事例

最終更新:2011年09月17日 23:55