ライブラリってどんなもの?
いろんなプログラム言語がありますが、どこでも見かける「ライブラリ」という言葉。なんとなくは理解しているつもりですが、これからカーネルのソースを読んでいくにあたって今一度整理してみることにしました。
かんたんに纏めると「よく使う処理を関数として予め作成したものを別の場所に保存しておき、必要に応じて呼び出す」モノ、といったところでしょうか?
WindowsでもDLL(ダイナミックリンクライブラリ)などがありますが、ACCESSやEXCELのVBAでもこれらを使うことで色々な機能を呼び出して使用することができますよね。
実際のソースを見てみる
ちょっとWeb上で見つけたサンプルソースを見てみることにします。
#include <stdio.h> string() { char msg[]="Jikken"; fprintf(stdout,"msg[1]=%c\n",msg[1]); } main() { int abc=4649; fprintf(stdout,"abc=%d\n",abc); string(); }
素人なりに読んでみてなんとか分かるのは
- string()は関数、main()も関数
- msgは文字を格納する配列、abcは数値を格納する変数
程度です。それ以外では「fprintf」と「stdout」がありますがこいつがよく分かりません。
で、調べてみるとfprintfは正にライブラリ関数のようで、最初にincludeしたヘッダーファイル「stdio.h」内に記述された機能である様子。
ということで、上記のサンプルソースをtest1.cという名前で保存してコンパイルしてみることにします。
cc ./test1.c
すると「a.out」という実行ファイルが作成されたので今度はコイツを実行。すると
# ./a.out abc=4649 msg[1]=i
という結果が返ってきました。ライブラリ関数を使用することで「処理結果を出力する」というありふれた処理を苦もなく行うことができました。
こんな簡単な処理でもライブラリを使用しなければ、自分で画面に結果を出力する過程をソース内に記述しなければならないってことですよね。
こうしたライブラリ関数を使いこなすことがプログラムを作成する上で欠かせない要素であることはなんとなくわかりました。
まとめ
今回分かったことは
- よく使う処理を予め記述して他の場所に保存しておき、必要なときに呼び出せる機能をライブラリ関数という
- ライブラリ関数を使用するための方法の一つとしてヘッダーファイルのIncludeがある
- ライブラリ関数を上手く使いこなすことはプログラミングを行う上で重要
といった感じです。
引き続き、Cでのプログラミングについて調べていくと共にLinuxカーネルを少しでも理解できるよう頑張ります!