intro

INTRO(2)                    Linux Programmer's Manual                   INTRO(2)



名前
       intro - システムコール序論

説明
       この章は Linux のシステムコールを記述しています。

   直接呼出す
       ほとんどの場合ダイレクトにシステムコールを呼ぶ必要はないが、 場合によっては標準の C ライブラリにあなたにとって
       好都合な関数が実装されていないときがある。

   書式
       #include <linux/unistd.h>

       A _syscall macro

       desired system call


   セットアップ
       システムコールに関しては、そのプロトタイプを知ることが重要で ある。つまり、引数の何個、それぞれの型、そして戻り値の型、
       こういったことを知らなければならない。実際の使用にあたっ て、こういった事柄をより容易にするために次の6個のマクロが用意され
       ている。その形式は以下の通りである:

              _syscallX(type,name,type1,arg1,type2,arg2,...)

                     ここで X は 0–5, それは当該のシステムコールが必要とする 引数の個数である。

                     type は当該システムコールの戻り値のタイプである。

                     name は当該システムコールの名前である。

                     typeN は N 番目の引数のタイプである。

                     argN は N 番目の引数の名前である。

       このマクロは、指定された引数と  名前 で呼ばれる一つの関数を生成 する。一旦、ソースファイルにこの _syscall() マクロがインク
       ルードされると 名前 によってこのシステムコールを呼ぶことができる。


       #include <stdio.h>
       #include <linux/unistd.h>     /* for _syscallX macros/related stuff */
       #include <linux/kernel.h>     /* for struct sysinfo */

       _syscall1(int, sysinfo, struct sysinfo *, info);

       /* 注意: nroff のソースファイルから直接コピーするときは
       printf 文に含まれている余分なバックスラッシュを 除去する
       ことを忘れないように */

       int main(void)
       {
            struct sysinfo s_info;
            int error;

            error = sysinfo(&s_info);
            printf("code error = %d\n", error);
               printf("Uptime = %ds\nLoad: 1 min %d / 5 min %d / 15 min %d\n"
                       "RAM: total %d / free %d / shared %d\n"
                       "Memory in buffers = %d\nSwap: total %d / free %d\n"
                       "Number of processes = %d\n",
                 s_info.uptime, s_info.loads[0],
                 s_info.loads[1], s_info.loads[2],
                 s_info.totalram, s_info.freeram,
                 s_info.sharedram, s_info.bufferram,
                 s_info.totalswap, s_info.freeswap,
                 s_info.procs);
            return(0);
       }

出力例
       code error = 0
       uptime = 502034s
       Load: 1 min 13376 / 5 min 5504 / 15 min 1152
       RAM: total 15343616 / free 827392 / shared 8237056
       Memory in buffers = 5066752
       Swap: total 27881472 / free 24698880
       Number of processes = 40

注意
       この _syscall() マクロはプロトタイプを 生成しない。ユーザーは自分で プロトタイプを作成しなければならない。 C++ ユーザーの場合は
       得に重要である。

       システムコールは、正のエラーコードであれ負のエラーコードで あれ、返すことを義務づけられているわけではない。
       だから、当該のシステムコールがエラーを返すかどうかに関しては そのソースを読む必要がある。 通常、標準のエラーコード、 例えば -EPERM
       に関しては負のエラーコードである。 _syscall() マクロは、当該のシステムコールの戻り値 r が非負であるとき、
       その値を返すが、負のときは大域変数 errno に -r をセットして -1 を返す。

       幾つかのシステムコール、例えば mmap, のようなシステムコール は5個以上の引数を要求する。こういったシステムコールは、
       スタックに引数をプッシュし、その引数ブロックへのポインタを 渡して処理される。

       あるシステムコールを定義する際、その引数タイプは値渡しであ るか、あるいはポインタ渡し(構造体のような集合的なデータの 場合)でなければならない。

準拠
       このセクションでは、以下のような幾つかの記号を様々な Unix のタイプを指示 するために使用する。

       SVr4   "Programmer's Reference Manual: Operating System API (Intel
              processors)" (Prentice-Hall1992, ISBN 0-13-951294-2) によって記 述されている
              System V Release 4 Unix 。

       SVID   "The System V Interface Definition, Fourth Edition" によって記 述されている
              System V Interface Definition 。また、このド キュメントは
              ftp://ftp.fpk.novell.com/pub/unix-standards/svid から
              ポストスクリプト・ファイルで入手することができる。

       POSIX.1
              IEEE 1003.1-1990 part 1。また、これは ISO/IEC
              9945-1:1990sとしても知られているし、Donald Lewineの "POSIX Programmer's Guide"
              (O'Reilly & Associates,Inc., 1991, ISBN 0-937175-73-0)によって記述されている
              "IEEE Portable Operating System Interface for Computing
              Environments" としても知られている。

       POSIX.1b
              移植可能なオペレーティングシステムのためのリアルタイム機構を 記述した IEEE Std 1003.1b-1993
              (POSIX.1b standard)。また、 これは ISO/IEC 9945-1:1996 としても知られているし、 Bill
              O. Gallmeisterの "Programming for the real world - POSIX.4"
              (O'Reilly & Associates, Inc. ISBN1-56592-074-0) でも記述されている。

       4.3BSD/4.4BSD
              バークレーの4.3と4.4ディストリビューション。4.4BSD は4.3と上位互換である。

       V7     ベル研究所に由来する本家 Unixである Version 7。

ファイル
       /usr/include/linux/unistd.h

著者
       著作者と権利条件に関してはマニュアルページの最初を見ること。 但し、ページによって異なっている可能性がある。ご注意 を。



Linux 1.2.13                       22 May 1996                          INTRO(2)