]>
Commit | Line | Data |
---|---|---|
53780d2e MK |
1 | .\" |
2 | .\" Copyright (c) 1993 Michael Haardt (michael@moria.de), | |
3 | .\" Fri Apr 2 11:32:09 MET DST 1993 | |
4 | .\" | |
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, write to the Free | |
22 | .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, | |
23 | .\" USA. | |
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 | .\" | |
38f76cd2 | 35 | .\" 2007-10-23 mtk: created as a new page, by taking the content |
53780d2e MK |
36 | .\" specific to the _syscall() macros from intro(2). |
37 | .\" | |
26cf2565 | 38 | .TH _SYSCALL 2 2007-12-19 "Linux" "Linux Programmer's Manual" |
53780d2e MK |
39 | .SH NAME |
40 | _syscall \- invoking a system call without library support (OBSOLETE) | |
41 | .SH "SYNOPSIS" | |
42 | .B #include <linux/unistd.h> | |
43 | ||
44 | A _syscall macro | |
45 | ||
46 | desired system call | |
47 | .SH DESCRIPTION | |
48 | The important thing to know about a system call is its prototype. | |
49 | You need to know how many arguments, their types, | |
50 | and the function return type. | |
de5c8e39 | 51 | There are seven macros that make the actual call into the system easier. |
53780d2e MK |
52 | They have the form: |
53 | .sp | |
54 | .RS | |
55 | .RI _syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...) | |
a6e2f128 MK |
56 | .RE |
57 | .PP | |
58 | where | |
59 | .IP | |
60 | \fIX\fP is 0\(en6, which are the number of arguments taken by the | |
53780d2e | 61 | system call |
a6e2f128 | 62 | .IP |
53780d2e | 63 | \fItype\fP is the return type of the system call |
a6e2f128 | 64 | .IP |
53780d2e | 65 | \fIname\fP is the name of the system call |
a6e2f128 | 66 | .IP |
53780d2e | 67 | \fItypeN\fP is the Nth argument's type |
a6e2f128 | 68 | .IP |
53780d2e | 69 | \fIargN\fP is the name of the Nth argument |
a6e2f128 | 70 | .PP |
53780d2e MK |
71 | These macros create a function called \fIname\fP with the arguments you |
72 | specify. | |
73 | Once you include the _syscall() in your source file, | |
74 | you call the system call by \fIname\fP. | |
75 | .SH FILES | |
76 | .I /usr/include/linux/unistd.h | |
77 | .SH "CONFORMING TO" | |
8382f16d | 78 | The use of these macros is Linux-specific, and deprecated. |
53780d2e MK |
79 | .SH NOTES |
80 | Starting around kernel 2.6.18, the _syscall macros were removed | |
81 | from header files supplied to user space. | |
82 | Use | |
83 | .BR syscall (2) | |
84 | instead. | |
85 | (Some architectures, notably ia64, never provided the _syscall macros; | |
86 | on those architectures, | |
87 | .BR syscall (2) | |
88 | was always required.) | |
89 | ||
d6d50816 | 90 | The _syscall() macros \fIdo not\fP produce a prototype. |
53780d2e MK |
91 | You may have to |
92 | create one, especially for C++ users. | |
93 | .sp | |
94 | System calls are not required to return only positive or negative error | |
95 | codes. | |
96 | You need to read the source to be sure how it will return errors. | |
97 | Usually, it is the negative of a standard error code, | |
98 | for example, \-\fBEPERM\fP. | |
99 | The _syscall() macros will return the result \fIr\fP of the system call | |
100 | when \fIr\fP is non-negative, but will return \-1 and set the variable | |
101 | .I errno | |
102 | to \-\fIr\fP when \fIr\fP is negative. | |
103 | For the error codes, see | |
104 | .BR errno (3). | |
105 | ||
53780d2e MK |
106 | When defining a system call, the argument types \fImust\fP be |
107 | passed by-value or by-pointer (for aggregates like structs). | |
108 | .\" The preferred way to invoke system calls that glibc does not know | |
109 | .\" about yet is via | |
110 | .\" .BR syscall (2). | |
111 | .\" However, this mechanism can only be used if using a libc | |
112 | .\" (such as glibc) that supports | |
113 | .\" .BR syscall (2), | |
114 | .\" and if the | |
115 | .\" .I <sys/syscall.h> | |
116 | .\" header file contains the required SYS_foo definition. | |
117 | .\" Otherwise, the use of a _syscall macro is required. | |
118 | .\" | |
119 | .SH EXAMPLE | |
120 | .sp | |
121 | .nf | |
122 | #include <stdio.h> | |
123 | #include <stdlib.h> | |
124 | #include <errno.h> | |
125 | #include <linux/unistd.h> /* for _syscallX macros/related stuff */ | |
126 | #include <linux/kernel.h> /* for struct sysinfo */ | |
127 | ||
128 | _syscall1(int, sysinfo, struct sysinfo *, info); | |
129 | ||
130 | /* Note: if you copy directly from the nroff source, remember to | |
131 | REMOVE the extra backslashes in the printf statement. */ | |
132 | ||
133 | int | |
134 | main(void) | |
135 | { | |
136 | struct sysinfo s_info; | |
137 | int error; | |
138 | ||
139 | error = sysinfo(&s_info); | |
140 | printf("code error = %d\\n", error); | |
141 | printf("Uptime = %lds\\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\\n" | |
142 | "RAM: total %lu / free %lu / shared %lu\\n" | |
143 | "Memory in buffers = %lu\\nSwap: total %lu / free %lu\\n" | |
144 | "Number of processes = %d\\n", | |
145 | s_info.uptime, s_info.loads[0], | |
146 | s_info.loads[1], s_info.loads[2], | |
147 | s_info.totalram, s_info.freeram, | |
148 | s_info.sharedram, s_info.bufferram, | |
149 | s_info.totalswap, s_info.freeswap, | |
150 | s_info.procs); | |
151 | exit(EXIT_SUCCESS); | |
152 | } | |
153 | .fi | |
154 | .SS "Sample Output" | |
155 | .nf | |
156 | code error = 0 | |
157 | uptime = 502034s | |
158 | Load: 1 min 13376 / 5 min 5504 / 15 min 1152 | |
159 | RAM: total 15343616 / free 827392 / shared 8237056 | |
160 | Memory in buffers = 5066752 | |
161 | Swap: total 27881472 / free 24698880 | |
162 | Number of processes = 40 | |
163 | .fi | |
164 | .SH "SEE ALSO" | |
165 | .BR intro (2), | |
166 | .BR syscall (2), | |
167 | .BR errno (3) |