2007-10-23 13:21:31 +00:00
|
|
|
.\"
|
|
|
|
.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
|
|
|
|
.\" Fri Apr 2 11:32:09 MET DST 1993
|
|
|
|
.\"
|
|
|
|
.\" This is free documentation; you can redistribute it and/or
|
|
|
|
.\" modify it under the terms of the GNU General Public License as
|
|
|
|
.\" published by the Free Software Foundation; either version 2 of
|
|
|
|
.\" the License, or (at your option) any later version.
|
|
|
|
.\"
|
|
|
|
.\" The GNU General Public License's references to "object code"
|
|
|
|
.\" and "executables" are to be interpreted as the output of any
|
|
|
|
.\" document formatting or typesetting system, including
|
|
|
|
.\" intermediate and printed output.
|
|
|
|
.\"
|
|
|
|
.\" This manual is distributed in the hope that it will be useful,
|
|
|
|
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
.\" GNU General Public License for more details.
|
|
|
|
.\"
|
|
|
|
.\" You should have received a copy of the GNU General Public
|
|
|
|
.\" License along with this manual; if not, write to the Free
|
|
|
|
.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
|
|
|
|
.\" USA.
|
|
|
|
.\"
|
|
|
|
.\" Tue Jul 6 12:42:46 MDT 1993 <dminer@nyx.cs.du.edu>
|
|
|
|
.\" Added "Calling Directly" and supporting paragraphs
|
|
|
|
.\"
|
|
|
|
.\" Modified Sat Jul 24 15:19:12 1993 by Rik Faith <faith@cs.unc.edu>
|
|
|
|
.\"
|
|
|
|
.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
|
|
|
|
.\" Added explanation of arg stacking when 6 or more args.
|
|
|
|
.\"
|
|
|
|
.\" Modified 10 June 1995 by Andries Brouwer <aeb@cwi.nl>
|
|
|
|
.\"
|
2007-11-15 03:28:33 +00:00
|
|
|
.\" 2007-10-23 mtk: created as a new page, by taking the content
|
2007-10-23 13:21:31 +00:00
|
|
|
.\" specific to the _syscall() macros from intro(2).
|
|
|
|
.\"
|
2007-12-19 07:24:03 +00:00
|
|
|
.TH _SYSCALL 2 2007-12-19 "Linux" "Linux Programmer's Manual"
|
2007-10-23 13:21:31 +00:00
|
|
|
.SH NAME
|
|
|
|
_syscall \- invoking a system call without library support (OBSOLETE)
|
|
|
|
.SH "SYNOPSIS"
|
|
|
|
.B #include <linux/unistd.h>
|
|
|
|
|
|
|
|
A _syscall macro
|
|
|
|
|
|
|
|
desired system call
|
|
|
|
.SH DESCRIPTION
|
|
|
|
The important thing to know about a system call is its prototype.
|
|
|
|
You need to know how many arguments, their types,
|
|
|
|
and the function return type.
|
2007-12-23 21:51:26 +00:00
|
|
|
There are seven macros that make the actual call into the system easier.
|
2007-10-23 13:21:31 +00:00
|
|
|
They have the form:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.RI _syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...)
|
2007-12-19 07:19:23 +00:00
|
|
|
.RE
|
|
|
|
.PP
|
|
|
|
where
|
|
|
|
.IP
|
|
|
|
\fIX\fP is 0\(en6, which are the number of arguments taken by the
|
2007-10-23 13:21:31 +00:00
|
|
|
system call
|
2007-12-19 07:19:23 +00:00
|
|
|
.IP
|
2007-10-23 13:21:31 +00:00
|
|
|
\fItype\fP is the return type of the system call
|
2007-12-19 07:19:23 +00:00
|
|
|
.IP
|
2007-10-23 13:21:31 +00:00
|
|
|
\fIname\fP is the name of the system call
|
2007-12-19 07:19:23 +00:00
|
|
|
.IP
|
2007-10-23 13:21:31 +00:00
|
|
|
\fItypeN\fP is the Nth argument's type
|
2007-12-19 07:19:23 +00:00
|
|
|
.IP
|
2007-10-23 13:21:31 +00:00
|
|
|
\fIargN\fP is the name of the Nth argument
|
2007-12-19 07:19:23 +00:00
|
|
|
.PP
|
2007-10-23 13:21:31 +00:00
|
|
|
These macros create a function called \fIname\fP with the arguments you
|
|
|
|
specify.
|
|
|
|
Once you include the _syscall() in your source file,
|
|
|
|
you call the system call by \fIname\fP.
|
|
|
|
.SH FILES
|
|
|
|
.I /usr/include/linux/unistd.h
|
|
|
|
.SH "CONFORMING TO"
|
2007-12-25 21:28:09 +00:00
|
|
|
The use of these macros is Linux-specific, and deprecated.
|
2007-10-23 13:21:31 +00:00
|
|
|
.SH NOTES
|
|
|
|
Starting around kernel 2.6.18, the _syscall macros were removed
|
|
|
|
from header files supplied to user space.
|
|
|
|
Use
|
|
|
|
.BR syscall (2)
|
|
|
|
instead.
|
|
|
|
(Some architectures, notably ia64, never provided the _syscall macros;
|
|
|
|
on those architectures,
|
|
|
|
.BR syscall (2)
|
|
|
|
was always required.)
|
|
|
|
|
2007-12-23 16:55:14 +00:00
|
|
|
The _syscall() macros \fIdo not\fP produce a prototype.
|
2007-10-23 13:21:31 +00:00
|
|
|
You may have to
|
|
|
|
create one, especially for C++ users.
|
2008-01-01 13:44:49 +00:00
|
|
|
|
2007-10-23 13:21:31 +00:00
|
|
|
System calls are not required to return only positive or negative error
|
|
|
|
codes.
|
|
|
|
You need to read the source to be sure how it will return errors.
|
|
|
|
Usually, it is the negative of a standard error code,
|
|
|
|
for example, \-\fBEPERM\fP.
|
|
|
|
The _syscall() macros will return the result \fIr\fP of the system call
|
_syscall.2, accept.2, epoll_create.2, inotify_add_watch.2, ioctl.2, msgget.2, msgop.2, open.2, prctl.2, sched_setscheduler.2, semctl.2, semget.2, swapon.2, addseverity.3, cacosh.3, csqrt.3, dirfd.3, drand48.3, fputws.3, mq_send.3, posix_openpt.3, puts.3, sched_getcpu.3, shm_open.3, sqrt.3, sysconf.3, tgamma.3, ulimit.3, credentials.7, svipc.7: Global fix: s/non-negative/nonnegative/
The tendency in English, as prescribed in style guides like
Chicago MoS, is towards removing hyphens after prefixes
like "non-" etc.
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2010-01-16 16:44:48 +00:00
|
|
|
when \fIr\fP is nonnegative, but will return \-1 and set the variable
|
2007-10-23 13:21:31 +00:00
|
|
|
.I errno
|
|
|
|
to \-\fIr\fP when \fIr\fP is negative.
|
|
|
|
For the error codes, see
|
|
|
|
.BR errno (3).
|
|
|
|
|
|
|
|
When defining a system call, the argument types \fImust\fP be
|
|
|
|
passed by-value or by-pointer (for aggregates like structs).
|
|
|
|
.\" The preferred way to invoke system calls that glibc does not know
|
|
|
|
.\" about yet is via
|
|
|
|
.\" .BR syscall (2).
|
|
|
|
.\" However, this mechanism can only be used if using a libc
|
|
|
|
.\" (such as glibc) that supports
|
|
|
|
.\" .BR syscall (2),
|
|
|
|
.\" and if the
|
|
|
|
.\" .I <sys/syscall.h>
|
|
|
|
.\" header file contains the required SYS_foo definition.
|
|
|
|
.\" Otherwise, the use of a _syscall macro is required.
|
|
|
|
.\"
|
|
|
|
.SH EXAMPLE
|
|
|
|
.nf
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <linux/unistd.h> /* for _syscallX macros/related stuff */
|
|
|
|
#include <linux/kernel.h> /* for struct sysinfo */
|
|
|
|
|
|
|
|
_syscall1(int, sysinfo, struct sysinfo *, info);
|
|
|
|
|
|
|
|
/* Note: if you copy directly from the nroff source, remember to
|
|
|
|
REMOVE the extra backslashes in the printf statement. */
|
|
|
|
|
|
|
|
int
|
|
|
|
main(void)
|
|
|
|
{
|
|
|
|
struct sysinfo s_info;
|
|
|
|
int error;
|
|
|
|
|
|
|
|
error = sysinfo(&s_info);
|
|
|
|
printf("code error = %d\\n", error);
|
|
|
|
printf("Uptime = %lds\\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\\n"
|
|
|
|
"RAM: total %lu / free %lu / shared %lu\\n"
|
|
|
|
"Memory in buffers = %lu\\nSwap: total %lu / free %lu\\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);
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
}
|
|
|
|
.fi
|
|
|
|
.SS "Sample Output"
|
|
|
|
.nf
|
|
|
|
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
|
|
|
|
.fi
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR intro (2),
|
|
|
|
.BR syscall (2),
|
|
|
|
.BR errno (3)
|