サブルーチン、プログラム例、およびライブラリー

このトピックには、どのようなサブルーチンがあるか、それらの使用法、およびそれらの保管場所についての情報が記載されています。

ストレージ・スペースを節約して使い、さらにプログラム・リンケージがより効率よく処理できるように するために、サブルーチンはライブラリーの中に保管されています。 ライブラリー とは、いくつかの個別ファイルのコピーと、個々にそれらにアクセスできるようにするための制御情報が入っているデータ・ファイルのことです。 ライブラリーは、/usr/ccs/lib ディレクトリー および /usr/lib ディレクトリーの中に入っています。 規則により、ほとんどのライブラリー には、libname.a (ここで 、name は特定のライブラリーを識別するものです) という形式の 名前が付いています。

include 文はすべて、コンパイルされている最初のファイルの先頭の近く、 通常は、main( ) の前の宣言セクションの中にある必要があり、 ライブラリー機能を使用する前に実行しなければなりません。 例えば、stdio.h ファイルを組み込む場合は、 次のステートメントを使用します。

#include <stdio.h>

標準 C ライブラリー (libc.a) の中に入っている サブルーチンを使用する場合、特別に実行しなければならないことは何もありません。 cc コマンドが自動的にこのライブラリーを検索して、 プログラムが必要とするサブルーチンを探します。 ただし、別のライブラリー内のサブルーチンを使用する場合は、 コンパイラーにそのライブラリーを検索するよう通知しなければなりません。 プログラムがライブラリー libname.a 内の サブルーチンを使用する場合は、フラグ -lname (小文字の L) を 用いてそのプログラムをコンパイルしてください。 次の例では、libdbm.a ライブラリー内のサブルーチンを使用するプログラム myprog.c をコンパイルします。

cc myprog.c -ldbm

複数の -l (小文字の L) フラグを指定することができます。 各フラグは、指定された順序で処理されます。

バークレー互換ライブラリーに保管されているサブルーチンを使用している場合は、以下の例に示すように、libc.a ライブラリーにバインドする前にlibbsd.a ライブラリーにバインドします。

cc myprog.c -lbsd

エラーが発生すると、多くのサブルーチンは -1 という値を戻し、errno と いう外部変数を設定して、エラーを識別します。 sys/errno.h ファイルでは、errno 変数を宣言し、 起こり得るエラー状態のそれぞれについて定数を定義します。

本書では、システム・コールはすべてサブルーチン と記載され、libc.a ライブラリーから得られます。 システム・コールへのプログラミング・インターフェースは、サブルーチンの プログラミング・インターフェースと同一です。 C 言語プログラムに関するかぎり、システム・コールは、 単にサブルーチン・コールにすぎません。 システム・コールとサブルーチンの実際上の違いは、実行する操作のタイプです。 プログラムがシステム・コールを起動すると、呼び出されたルーチンが オペレーティング・システム・カーネルの特権情報にアクセスできるように、 保護ドメイン・スイッチが行われます。 その後ルーチンは、カーネル・モードで稼働し、プログラムに代わってタスクを実行します。 このように、特権システム情報へのアクセスは、アクションを制御できる、事前定義された ルーチンのセットに限定されます。

注:
  1. 次のリストは、64 ビット libc.a の場合の差し替えとなる wString ルーチンを示しており、 対応する 64 ビット libc.a の同等のものを示しています。 32 ビット libc.a 用のルーチンは、wstring サブルーチンにあります。
    32 ビットのみ               64 ビットの同等サブルーチン
    
    
    wstrcat                     wcscat
    wstrchr                     wcschr
    wstrcmp                     wcscoll
    wstrcpy                     wcscpy
    wstrcspn                    wcscspn
    wstrdup                     Not available and has no
                                equivalents in the 64 bit libc.a
    wstrlen                     wcslen
    wstrncat                    wcsncat
    wstrncpy                    wcsncpy
    wstrpbrk                    wcspbrk
    wstrrchr                    wcsrchr
    wstrspn                     wcsspn
    wstrtok                     wcstok
  2. マルチバイト文字、ワイド文字、またはロケール固有の情報を扱うプログラムはすべて、そのプログラムの先頭で setlocale サブルーチンを呼び出す必要があります。
  3. マルチスレッド環境でのプログラミングには、データ保全性を確保するための 再入可能サブルーチンが必要です。