第2回 システムコールとライブラリ関数
青木峰郎
2008/10/20
■libc
Linuxに用意されているライブラリはいろいろありますが、その中で特に重要なのが標準Cライブラリ(standard C library)、通称libcです。すでにLinuxが動く環境があるなら、/libディレクトリを見てみてください。そこにlibc.so.6というファイルがあるでしょう。これがlibcの中核です。
さらに、libc.so.6はシンボリックリンクになっているはずです。どこを指しているのか「ls -l」で追跡してみましょう。
$ ls /lib/libc.so.6 /lib/libc.so.6 $ ls -l /lib/libc.so.6 lrwxrwxrwx 1 root root 13 Nov 23 2002 /lib/libc.so.6 -> libc-2.2.5.so |
このように、私の環境ではlibc-2.2.5.soというファイルを指しています。数字の部分はディストリビューションの種類やバージョンによって違いますが、現時点では2.1から2.4の間のどれかになっているはずです。
Linuxで普通使われているlibcはGNU libc(略してglibc)と言って、その名のとおりGNUプロダクトの一部です。先ほど説明したとおり、LinuxカーネルはLinusさんが作っていますが、GNU libcはまた別の人が作っています。この辺りの事情も「Linuxはカーネルだけ」と言われる所以です。
続いて/libを眺めてみると、他にもlibm.so.6であるとかlibdl.so.2であるとか、libnss何々といったファイルがありますね。実はこれらも標準Cライブラリの一部です。ライブラリはファイルだと述べましたが、必ずしも1つのファイルとは限らないのです。libm.so.6ならば数学関係の関数、例えばsin()やcos()が入っています。
/libにあるファイルは、ほとんどが標準Cライブラリを構成するファイルです。
■API
システムコールやライブラリの話をしたついでに、「API」についても述べておきましょう。
API(Application Programming Interface)というのは、何かを使ってプログラミングするときのインターフェイスのことを指します。例えば(Cの)ライブラリのAPIは関数やマクロです。カーネルのAPIはシステムコールです。また、場合によっては、設定ファイルや、LinuxコマンドなどもAPIに入ります。このように、APIという言葉はプログラミングするときに使うものをほとんど包括する、語義の広い言葉なのです。
なぜこんなことを説明するかというと、世の中には「API」を「システムコール」と同じ意味だと思っている方がいるようだからです。その元凶は明らかに「Win32 API」でしょう。この言葉は本来「WindowsというOSの、Win32サブシステムのAPI」という意味で、その中にはシステムコール以外のものもたくさん含まれているのですが、なぜかシステムコールと同じものと解釈されてしまうことがあります。もしみなさんが勘違いしていたようなら、ここで本当の意味を覚えておきましょう。
本連載は、ソフトバンククリエイティブ刊行の『ふつうのLinuxプログラミング』のうち第1部「Linuxの仕組み」の中から「第2章 Linuxカーネルの正解」と「第3章 Linuxを描き出す3つの概念」を、同社の許可を得て転載するものです。 本書は、LinuxにおけるC言語プログラミングの入門書です。「Linuxの世界が何でできているのか」に着目し、「ファイルシステム」「プロセス」「ストリーム」という3つの概念を紹介しています。 なお、本連載は転載を行っているため@IT自分戦略研究所の表記とは一部異なる点があります。ただし、Webで掲載するに当たり、(例えば「本書は」としている部分は「本連載は」としていること、図版などの省略など)、表現を若干変更している点がありますが、その点ご了承ください。 |
関連記事 |
Linuxに触れよう |
LPICに見るLinuxを学ぶ意味とは |
実践でも役立つLPICドリル インデックス |
Linuxをいまから学ぶコツ教えます |
第1回 Linux認定資格・試験の世界 |
@IT自分戦略研究所は2014年2月、@ITのフォーラムになりました。
現在ご覧いただいている記事は、既掲載記事をアーカイブ化したものです。新着記事は、 新しくなったトップページよりご覧ください。
これからも、@IT自分戦略研究所をよろしくお願いいたします。