OSSのソースからいろんなことを学ぼう
最近、C言語の業務ばかりやっており、CのコーディングスキルアップのためにOSSのコードをチェックアウトして見ます。
今回は、FreeBSDをチェックアウトします。
なぜ、FreeBSDかと言いますとGNUに比べるとソースが読みやすいとのことだったからです。
FreeBSDとは
安定性と堅牢性を特徴としたUnix系のオープンソースのオペレーティングシステムです。
「BSD」は、「Berkeley Software Distribution」の略表記とされています。
ネットワークOSとしての稼働実績はLinux系よりも高く高負荷でも安定したパフォーマンスを維持し続ける信頼性に定評があるそうです。
ソースコードをチェックアウトしてみよう
では、FreeBSDのソースコードをチェックアウトしてみます。
FreeBSDは、Subversionで管理されているので、svnコマンドでチェックアウトします。
libcをチェックアウトしたい場合は、以下のURLからチェックアウトします。
(バージョンは11.2のソースをチェックアウトします)
https://svn.freebsd.org/base/releng/11.2/lib/libc/
今回は、fopen関数の中身をみたいので、stdioをチェックアウトします。
https://svn.freebsd.org/base/releng/11.2/lib/libc/stdio
インクルードファイルも見ることになると思うので、includeフォルダもチェックアウトしておきましょう。
https://svn.freebsd.org/base/releng/11.2/include/
stdioフォルダのチェックアウトのコマンドは次のとおりです。
# svn co https://svn.freebsd.org/base/releng/11.2/lib/libc/stdio
ソースを読もう
コーディングスキルを高めるには、コード自体を書くというのも大事ですが、優れたOSSのコードを読むというのもスキルを高める上で必要だと思います。
今回は、fopen.cを見てみます。
(ソースの内容は各自で参照してください)
軽くソースを見た感じの私の理解は次のとおりです。
- 引数に指定したモードのチェック
- ストリームを制御するためのFILEオブジェクトがあるかチェックし、あればFILEオブジェクトを初期化
- 引数に指定したファイルをオープン
- FILEオブジェクトに必要な情報を追加し、FILEオブジェクトを返却
関数自体は短いですが、他の関数を利用しているので詳細まで理解するには利用している関数まで見る必要があります。
ただ、関数を小さくしかつインデントも1段階であり、エラーであれば即時リターンとなっているので、概要はすぐに把握できるようになっています。
今回、fopen.cを見て、基本的なことですが、インデントは1段階とする、エラー時は、即時リターンするということを得ることが出来ました。