プログラミング Linux

プログラミング Linux レビュー記事

[ ブックレビューコーナー 目次 ]

株式会社アスキー様のご厚意により, 書籍 "プログラミング Linux" を JLUG および JLUG Webmasters あて ご献本いただきました. この本のレビューをして頂くべく, Linux Users ML において公募を行い, これにご応募頂いた方々より感想などをレビュー記事にまとめていただきました.

ここに, レビューアの方々から寄せられたレビュー記事を公開します.

株式会社アスキー様および レビューアの皆様のご厚意に感謝いたします.

なお, 以下のレビューは初版を対象としています.


Reviewed by 水引孝至 (mizuhiki@cclub.cc.tut.ac.jp) さん

Linux の使用歴
3 年
UNIX の使用歴
なし
Linux Box の主な用途
プログラミング, その他諸々
Linux Box に載っている Linux 以外の OS
Windows95
Linux と Linux 以外の OS の使用頻度の比
Linux:Windows 95 = 3:1

Linux 関係の本には必ずといっていいほどのお決まりがある. それは, 大抵の場合, 本の一番最初にある Linux が誕生した経緯が書かれたセクションであるのだが, この本の場合はちょっと書き方が違う. 初心者向けに書かれた本には, 一番最初に「Linus Torvalds はヘルシンキ大学の学生で…」 といった文章が来るのであるが, この本ではまず, "Linux" という文字の意味について言及している. それは, 一つには, カーネルとしての "Linux" と, もう一つは, ツール, 開発環境まで含めた Linux をカーネルとするオペレーティングシステムとしての "Linux" という定義である. 後者はいわゆるディストリビューションが相当するので, 実際には, "Slackware Linux" とか, "Red Hat Linux" とか, "Debian GNU/Linux" とか呼ばれたりするのであるのだが, それらは広義の "Linux" として通用する.

この本ではこの意味での "Linux" を使用すると明記している. こういう事をまず始めに明記した点で察しがつくように, この本は, いわゆる初心者向けには書かれていない. また, プログラミングの参考書であるが, C 言語を解説するようなことはしていない. 読者は C 言語を習得している必要がある.

"hello.c" を期待してはいけない. C 言語を習得している読者向けに, プログラマから見た, Linux の Linux らしい部分について解説されているのが, 本書である.

さて, Linux の Linux らしい部分…ということは, 次の章では早速ハードウエアを叩くかな? と思うと, そうではない. 本書の第 2 章では「ライセンスと著作権」という, プログラマがソフトウエアを公開する際に一番苦手 (というのは僕の思い込みかもしれないけど, 僕自身は苦手) な法律のお話である. そして, 技術的なお話よりも前にこのセクションを持ってきた筆者の気持ちを察すると面白い. 筆者は "プログラムが出来たら公開してね" というメッセージを暗黙のうちに読者に送っているかのようにも思える. GPL はもちろん, MIT/X ライセンス, BSD ライセンス等の有名所のライセンス方式について, 簡単ではあるが重要なところを簡潔に記述してあり, 非常にわかりやすい.

"Appendix C" には, GPL と LGPL ついて, 原文と日本語訳 (日本語訳は GPL のみ) が掲載されており, 法律のことなどはシステムコールの使い方ほどには覚えていられない プログラマにとっては, 大きな助けになるだろう.

次の第 3 章は, 「Linux に関する情報源」というタイトルで, Linux についての情報を入手するための手段や, 情報の場所を紹介している. そもそも本書のような本を必要とするプログラマは, これらのリソースやアクセス手段を知らなければ話にならない. こういうことを解説するセクションを, やはり本の始めの方に持ってくるというのも, 筆者にこだわりがあるように思えるのは私だけだろうか. 大抵の場合, こういった物は本の一番最後に申し訳程度に記載されているのが普通である.

ここで残念なのは, 日本での事情についての説明が無いことである. 日本語の訳書であるのだから, 訳注としてでもいいから日本での情報源も記載して欲しかった. JLUG の運営する Linux Users ML を始めとして, 数多くのメーリングリストや, fj.os.linux 等の日本語で議論できるニュースグループがあり, カーネルや多くのディストリビューションや開発ツールが 日本にミラーされているのだから, それらの追記があっても良かった. 幸い, http://www.linux.or.jp/ が以前にも増して充実したサイトになっているから, 日本の事情を知りたければ, とりあえずは, http://www.linux.or.jp/ を見て欲しい.

先の第 3 章までが, "Part 1" となっている. 次の第 4 章からは "Part 2 開発ツールと開発環境" というタイトルで, 続く第 6 章まで, エディタ, make, gdb, gcc, メモリデバッグツールとして, Electric Fence, Checker, mpr 等のツールの使い方を解説している. エディタについては, 実際の使い方についての解説はなく, Emacs と vi の紹介に止まっている. これは, 非常に好感が持てる. エディタは開発環境の重要なツールの一つであるが, 開発の本質ではない. プログラマにとって, それよりも重要なのは, Makefile の書き方であったり, gdb や gcc の使い方, メモリリークをデバッグする為の方法である. これらのことに関しては, 簡単にではあるが, 必要なことを書くという本書のスタンスに則り読みやすく書かれている.

第 7 章はライブラリの作り方, 特に, 共有ライブラリの作り方について述べている. 共有ライブラリを作る際に注意すべきことが書かれている. 第 8 章はシステムコールの使い方について書いている.

さて, ここまでが "Part 2" の内容である. 続く "Part 3 システムプログラミング" では Linux がデザインの参考にした UNIX システムでも共通の概念であるところのプログラミング Tips を紹介している. プロセスモデル, ファイル・ディレクトリ操作, シグナル処理, ジョブコントロール, 端末, ネットワークなどである. これらを解説するために, もはや UNIX 本のセオリーである「コマンドシェル(ladsh)の作成」を例にとっている. シェルを作るというのは UNIX の教科書でずいぶんと使われた教え方の一つであり, 私はこの方法でシステムコールの使い方を教える本を数冊知っている. 本書もそれを踏襲している. 教える手法がすっかり枯れたものであるため, 安心して読める.

"Part 4" は, プログラミングの際に便利に使う事のできる開発ライブラリを紹介している. 文字列の glob を行ったり, 正規表現をを使う方法などを紹介している. また, S-Lang ライブラリを使った端末制御を行うプログラミング法についても 述べている. 私個人としては, 今後, X Window System 上で動作する GUI ベースのアプリケーションを開発する需要が, 端末上で動作するアプリケーションよりも増えると思っているので, S-Lang ライブラリプログラミングをわざわざページを割いて解説することについて, 若干の疑問がある点は否めない. ただ, 本書の最初で, 「例えば, X Window System は全ての Linux または UNIX プラットフォームで同一なので説明しない」と明記しているので, それが本書のスタンスである. かえって, X プログラミングの中途半端な解説があるよりはいいと思う.

23 章ではデータベースライブラリとして, dbm の使い方を解説している. 24 章では, アプリケーションを開発する際に結構需要があるにもかかわらず, 以外と自分で処理してしまう事が多い, コマンドラインオプションの解析に便利なライブラリについて解説している.

25 章では, ダイナミックローディングの手法, 26 章では, ユーザデータベースの処理について解説している. 26 章では, PAM (Pluggable Authentication Module) について紹介されているのだが, 紹介だけに終っているのが残念である. 実際の使用方法を解説してあると良かった.

ここまでで, 本文は終り, 続く Appendix A では, Linux システムの特徴でもある, ioperm システムコールの使い方を解説している. 簡単で Passive なコントロールだけで十分なデバイスを扱うために 非常に便利なものであるので, システムの制御に Linux を使う人も多いだろう. そういう人はこの章をじっくり読むと良いと思う. Appendix B では, システムコールの使い方を解説するために例にとって開発したシェル "ladsh" (Linux Application Development's SHell の略?) の全ソースコードが載っている. 最後の章となる Appendix C には, GPL の原文及び日本語訳, LGPL の原文のみが掲載されている. なぜか, LGPL の訳が掲載されていないのは残念である.

レビュー記事の最後として本書の全ての大章を列挙する.

Part 1 はじめに

第 1 章Linux 開発の沿革
第 2 章ライセンスと著作権
第 3 章Linux に関する情報限

Part 2 開発ツールと開発環境

第 4 章開発ツール
第 5 章gcc のオプションと拡張
第 6 章メモリデバッグツール
第 7 章ライブラリの作成としよう
第 8 章Linux 開発環境

Part 3 システムプログラミング

第 9 章プロセスモデル
第 10 章簡単なファイル操作
第 11 章ディレクトリ操作
第 12 章高度なファイル操作
第 13 章シグナル処理
第 14 章ジョブコントロール
第 15 章端末と疑似端末
第 16 章ソケットによるネットワーク
第 17 章時刻
第 18 章乱数
第 19 章仮想コンソールのプログラミング
第 20 章Linux のコンソール

Part 4 開発ライブラリ

第 21 章文字列マッチング
第 22 章S-Lang による端末処理
第 23 章データベースライブラリ
第 24 章コマンドラインオプションの解析
第 25 章ダイナミックローディング
第 26 章名前とユーザデータベース

Appendix

Appendix AI/O ポートへの直接アクセス
Appendix Bladsh ソースコード
Appendix CGNU ライセンス

Reviewed by 井上 隆文 (TInoue@jp.COMPAQ.com) さん

Linux の使用歴
4年 (1994年10月から)
UNIX の使用歴
1985年から断続的に10年くらい
Linux Box の主な用途
プロトタイプの開発、テスト用のマシン
Linux Box に載っている Linux 以外の OS
Windows95
Linux と Linux 以外の OS の使用頻度の比
1:1

プログラミングLinux (アスキー出版局) 5800円+税 494ページ

目次

第1章Linux開発の沿革 第2章ライセンスと著作権
第3章Linuxに関する情報源 第4章開発ツール
第5章gccのオプションと拡張 第6章メモリデバッグツール
第7章ライブラリの作成と使用 第8章Linuxの開発環境
第9章プロセスモデル 第10章簡単なファイル操作
第11章ディレクトリ操作 第12章高度なファイル操作
第13章シグナル処理 第14章ジョブコントロール
第15章端末と疑似端末 第16章ソケットによるネットワーク
第17章時刻 第18章乱数
第19章仮想コンソールのプログラミング 第20章Linuxのコンソール
第21章文字列マッチング 第22章S-Langによる端末処理
第23章データベースライブラリ 第24章コマンドラインオプションの解析
第25章ダイナミックローディング 第26章名前とユーザデータベース
Appendix

(1)内容について

上に目次を紹介していますが, 特色は次のようなところだと思います.

(a) Linux の特色を生かしたシステムプログラミングから 一般的なアプリケーションプログラムまでが作成できるように広くカバーしています. ただし, 他のプログラミング教本のように コーディング例が多数記載されているわけではありませんので, そのあたりは他の良書を参考にすればいいと思います. 一般的な中程度のプログラミング本としても良書だと思います.

(b) 開発環境やデバッグ環境を詳解しています. 実際にはこの辺は広く浅くであり実際に使いこなすにはエディタはエディタ, デバッガはデバッガなどそれぞれ別の本を参考にしなければならないと思いますが, Linux で提供されている開発の流れというのを感覚的に捉えることができます. こういったことはたいしたことではないようですが, 他のUNIX上での開発経験がある方でも プラットフォーム固有の環境でつまづく人も多いと思いますので, この程度の広く浅い扱いは有り難いと思います.

(c) ネットワーク周りの実装上の特色やライブラリの実装など Linux 固有の環境の説明について十分に述べられており, これも他のプラットフォームからのポーティングなどに役立つことと思います.

(d) スタティックライブラリ, 共有ライブラリ, ダイナミックローディングなど他の UNIX の書物だと理解しにくいものが 理解しやすく書かれており, この本を読んでから他の UNIX の書物を読むとわかりやすいということもあるかも知れません.

(e) 以前からGNU のプロダクトに明るい人はともかく, 最近のオープンソース活動で初めて知った方は GPL(GNU General Public License) の精神などに触れる機会はなかなかなかったと思いますが, この程度の記述はライセンスや著作権の問題をクリアするために 必要になることもあると思います. これに関する記述は役に立つときがあるでしょう.

(2)この本を勧めたい人達

この本は最近, 巷にあふれているいわゆるインストール本ではありませんし 「プログラミング」と名前をつけてはいるものの プログラミングの入門書でもありません.

前提条件として.

などをあげたいと思います.

これまでインストールばかりでこれから腰を据えて Linux 上で C 言語でのプログラミングをやろうとしている方にお勧めです.

Reviewed by 岩生 徹 (tohru_i@qb3.so-net.ne.jp) さん

Linux の使用歴
1年半
UNIX の使用歴
無し
Linux Box の主な用途
internet 端末, C 言語学習, Linux の学習
Linux Box に載っている Linux 以外の OS
Windows98
Linux と Linux 以外の OS の使用頻度の比
Linux : Windwos98 = 6 : 4

Linux で自分のアプリケーションを動かしてみたい. そんな思いに駆られたことはないだろうか. 職業プログラマでも, 日頃 OS のシステムコールを直接利用している方は少ないと思う. かく言う私も SQL 言語との格闘の毎日で, 少しの Win32API を利用するだけである. そんな中にありながらも Linux のシステムコールを利用して アプリケーションを造ってみたいと思わずにはいられない. なぜなら, Linux は優れた OS であるし, 安価に UNIX プログラムができるという感動がある. しかも, 今後あらゆる場面のシステムに導入されるケースが増えてくるであろうから, Linux プログラマは必要とされると感じるからだ. では私のような UNIX プログラミング経験のない者が Linux 上でアプリケーションを作成するにはどうしたらいいのだろう. かなりの情報を得なければならないと思うが, この本を読むのもその一つの手段である.

以下に本書の内容を簡単に紹介する.

「プログラミング Linux」は Michael K.Johnson/Erik W.Troan 共著による "Linux Application Development"を和訳したもので, Linux カーネルシステムコールの解説書である. 4 パートの構成と 3 つの Appendix からなり, 途中にサンプルコードを使ってカーネルシステムコールの利用方法を説明しながら, 索引まであわせて 494 ページとなっている. 前書きの冒頭に

本書は, 経験のある(熟練でなくても学習意欲が旺盛な)プログラマで, Linux ソフトウェアの開発, または他のプラットフォームからの Linux へのソフトウェアのポーティングを行う人々を対象

とあるようにプログラムを全く経験したことのない人向けには書かれていない. C 言語でプログラムを書けることと, オペレーティングシステムの基本的な知識を有している必要がある. Linux カーネルのインターフェースは C 言語であるし, Linux は紛れもなくオペレーティングシステムだからである.

最初のパートは「はじめに」と題されており, Linux に関する一般常識講座で始まる. カーネルの開発経緯やライセンス関係の情報, 情報源の収集場所の紹介である. この部分はどの Linux 書籍でも触れられる部分であるが, 特にライセンスについてはアプリケーションを作成するうえで 注意すべきことについて述べられている.

次のパートは, プログラミングに使用されるツールと開発環境について説明されている. make, gdb の使用方法と gcc のオプションについて説明し, また, メモリーリークとバッファオーバーランといったエラーについて デバッグを容易にする "ElectricFence", "Checker" および "mpr" といったツールを紹介し使用方法を説明している. 共有ライブラリの作成方法と使用方法, およびシステムコールの返すエラーコード利用方法もこのパートに含められている.

3 番目のパートからいよいよプログラミングの手ほどきに入る. 最初に説明されるのはプログラムの実行単位であるプロセスモデルである. プロセスの属性の情報を得る方法や, プロセスからプロセスを作成する方法等を解説する. ここで "ladsh" という UNIX コマンドシェルの機能を持つサンプルプログラムが載っている. ladsh は本書を読みながら変更を加えていって 読み終わる頃に完成することになっている. そして, 次はやはりファイルの操作方法である. ファイルの読み書きやアクセス権について解説している. 基本的なファイル操作を述べたところで, "ladsh" へリダイレクションの機能追加が行われる. その後, ディレクトリの操作方法とファイル名補完の方法が説明され, "ladsh" にディレクトリ移動とファイル名補完機能が追加される. このようにシステムコールを学習してはサンプルコードで利用していくという形式で プログラミングしながら, システムコールの動作を見ていくことができるようになっている. このパートではこの後に, tty インターフェース, ファイル入出力の多重化の方法, ファイルマッピングの方法, プロセス間通信の手法であるシグナル処理, ジョブコントロールためにプロセスグループを操作, ソケットによるネットワークプログラミング, 仮想コンソールと Linux コンソールについて解説する.

最後のパートはライブラリについての解説である. S-Lang による端末処理, データベースライブラリ, コマンドラインオプション解析, ダイナミックローディング, 名前とユーザデータベースについて解説している.

Appendix にも重要な情報が載っている. I/O ポートへの直接アクセスについてわずかであるが使用方法が述べてある. 後は GPL とその和訳, LGPL が掲載され, 最後に用語の解説と参考文献一覧が載っている.

以上が本書の内容であるが, 全体的に UNIX を意識して書かれていない. Linux が中心となっていて UNIX との互換性について必要な情報を与える様になっている. UNIX システムコール全般を解説しているわけではないので, 解説されていないシステムコールについては他の情報源を探さなくてはならない. 幸い本文の各所に参考文献の紹介が載せられてある. 例えばソケットによるネットワークプログラミングについては, Stevens, W. Richard. 著 UNIX Network Programing が紹介されている.

私は UNIX プログラミングを経験していないため, 本書を読んですぐにプログラミングできるとは感じなかったが, C 言語が理解できればその他の UNIX プログラミング書籍と併せて学習し, アプリケーションを造ることは可能だと思う. Linux システムコール(そのほとんどは POSIX 互換らしいが)について 解説する書籍は現在数少ない状況であるから, この本は Linux プログラマにとって必携の書となるのではないだろうか.

Linux 上で自分のプログラムが走るのを夢見て, さて, もう一度じっくり読み直しである.


[ ホーム | マップ | ニュース | 検索 | ドキュメント | リンク | プロジェクト ]
このサイトに関するご意見・ご要望は Webmasters までお願い致します.