OSDN Git Service

f4898c12042b7af3b7422e7d4eb6aad8cc06fe84
[linuxjm/LDP_man-pages.git] / draft / man2 / _syscall.2
1 .\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
2 .\"   Fri Apr  2 11:32:09 MET DST 1993
3 .\"
4 .\" %%%LICENSE_START(GPLv2+_DOC_FULL)
5 .\" This is free documentation; you can redistribute it and/or
6 .\" modify it under the terms of the GNU General Public License as
7 .\" published by the Free Software Foundation; either version 2 of
8 .\" the License, or (at your option) any later version.
9 .\"
10 .\" The GNU General Public License's references to "object code"
11 .\" and "executables" are to be interpreted as the output of any
12 .\" document formatting or typesetting system, including
13 .\" intermediate and printed output.
14 .\"
15 .\" This manual is distributed in the hope that it will be useful,
16 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
17 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 .\" GNU General Public License for more details.
19 .\"
20 .\" You should have received a copy of the GNU General Public
21 .\" License along with this manual; if not, see
22 .\" <http://www.gnu.org/licenses/>.
23 .\" %%%LICENSE_END
24 .\"
25 .\" Tue Jul  6 12:42:46 MDT 1993 <dminer@nyx.cs.du.edu>
26 .\" Added "Calling Directly" and supporting paragraphs
27 .\"
28 .\" Modified Sat Jul 24 15:19:12 1993 by Rik Faith <faith@cs.unc.edu>
29 .\"
30 .\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
31 .\"   Added explanation of arg stacking when 6 or more args.
32 .\"
33 .\" Modified 10 June 1995 by Andries Brouwer <aeb@cwi.nl>
34 .\"
35 .\" 2007-10-23 mtk: created as a new page, by taking the content
36 .\" specific to the _syscall() macros from intro(2).
37 .\"
38 .\"*******************************************************************
39 .\"
40 .\" This file was generated with po4a. Translate the source file.
41 .\"
42 .\"*******************************************************************
43 .TH _SYSCALL 2 2007\-12\-19 Linux "Linux Programmer's Manual"
44 .SH 名前
45 _syscall \- ライブラリのサポートなしでシステムコールを起動する (昔の方法)
46 .SH 書式
47 \fB#include <linux/unistd.h>\fP
48
49 A _syscall macro
50
51 desired system call
52 .SH 説明
53 システムコールに関してそのプロトタイプを知ることが重要である。 引き数の個数、それらの型、返り値の型を知る必要がある。
54 実際の使用にあたっては、システムコールをシステムに呼び出しやすくするために、 7 個のマクロが用意されている。これらのマクロは以下の形である。
55 .sp
56 .RS
57 _syscall\fIX\fP(\fItype\fP,\fIname\fP,\fItype1\fP,\fIarg1\fP,\fItype2\fP,\fIarg2\fP,...)
58 .RE
59 .PP
60 ここで
61 .IP
62 \fIX\fP は 0〜6 で、システムコールが取る引き数の個数である。
63 .IP
64 \fItype\fP はシステムコールの返り値の型である。
65 .IP
66 \fIname\fP はシステムコールの名前である。
67 .IP
68 \fItypeN\fP は N 番目の引き数の型である。
69 .IP
70 \fIargN\fP は N 番目の引き数の名前である。
71 .PP
72 これらのマクロは、指定した引き数を持つ \fIname\fP という名前の関数を生成する。 一度ソースファイルの中で _syscall()
73 をインクルードしておくと、 そのシステムコールを \fIname\fP という名前で呼ぶことができる。
74 .SH ファイル
75 \fI/usr/include/linux/unistd.h\fP
76 .SH 準拠
77 これらのマクロは Linux 固有であり、その使用は非推奨である。
78 .SH 注意
79 カーネル 2.6.18 あたりから、_syscall マクロ群はユーザ空間に対して提供される ヘッダファイルから削除された。代わりに
80 \fBsyscall\fP(2)  を使用すること。 (いくつかのアーキテクチャ、特に ia64、では、これまで _syscall マクロが
81 提供されたことはない。このようなアーキテクチャでは、常に \fBsyscall\fP(2)  が必要であった。)
82
83 _syscall() マクロはプロトタイプを「生成しない」。 ユーザはプロトタイプを自分で書かなければならないかもしれない。 とりわけ C++
84 ユーザの場合はそうであろう。
85
86 System calls are not required to return only positive or negative error
87 codes.  You need to read the source to be sure how it will return errors.
88 Usually, it is the negative of a standard error code, for example, i
89 \-\fIEPERM\fP.  The _syscall() macros will return the result \fIr\fP of the system
90 call when \fIr\fP is nonnegative, but will return \-1 and set the variable
91 \fIerrno\fP to \-\fIr\fP when \fIr\fP is negative.  For the error codes, see
92 \fBerrno\fP(3).
93
94 .\" The preferred way to invoke system calls that glibc does not know
95 .\" about yet is via
96 .\" .BR syscall (2).
97 .\" However, this mechanism can be used only if using a libc
98 .\" (such as glibc) that supports
99 .\" .BR syscall (2),
100 .\" and if the
101 .\" .I <sys/syscall.h>
102 .\" header file contains the required SYS_foo definition.
103 .\" Otherwise, the use of a _syscall macro is required.
104 .\"
105 システムコールを定義する際、引き数の型は値渡し (by\-value) か、 (構造体のように集合的なデータの場合は) ポインタ渡し
106 (by\-pointer)  でなければならない。
107 .SH 例
108 .nf
109 #include <stdio.h>
110 #include <stdlib.h>
111 #include <errno.h>
112 #include <linux/unistd.h>       /* for _syscallX macros/related stuff */
113 #include <linux/kernel.h>       /* for struct sysinfo */
114
115 _syscall1(int, sysinfo, struct sysinfo *, info);
116
117 /* Note: nroff のソースファイルから直接コピーする際には、
118 printf 文内の余分なバックスラッシュを忘れずに削除するように。 */
119
120 int
121 main(void)
122 {
123     struct sysinfo s_info;
124     int error;
125
126     error = sysinfo(&s_info);
127     printf("code error = %d\en", error);
128     printf("Uptime = %lds\enLoad: 1 min %lu / 5 min %lu / 15 min %lu\en"
129            "RAM: total %lu / free %lu / shared %lu\en"
130            "Memory in buffers = %lu\enSwap: total %lu / free %lu\en"
131            "Number of processes = %d\en",
132            s_info.uptime, s_info.loads[0],
133            s_info.loads[1], s_info.loads[2],
134            s_info.totalram, s_info.freeram,
135            s_info.sharedram, s_info.bufferram,
136            s_info.totalswap, s_info.freeswap,
137            s_info.procs);
138     exit(EXIT_SUCCESS);
139 }
140 .fi
141 .SS 出力例
142 .nf
143 code error = 0
144 uptime = 502034s
145 Load: 1 min 13376 / 5 min 5504 / 15 min 1152
146 RAM: total 15343616 / free 827392 / shared 8237056
147 Memory in buffers = 5066752
148 Swap: total 27881472 / free 24698880
149 Number of processes = 40
150 .fi
151 .SH 関連項目
152 \fBintro\fP(2), \fBsyscall\fP(2), \fBerrno\fP(3)
153 .SH この文書について
154 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.52 の一部
155 である。プロジェクトの説明とバグ報告に関する情報は
156 http://www.kernel.org/doc/man\-pages/ に書かれている。