summaryrefslogtreecommitdiffstats
path: root/man2/intro.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/intro.2')
-rw-r--r--man2/intro.2186
1 files changed, 186 insertions, 0 deletions
diff --git a/man2/intro.2 b/man2/intro.2
new file mode 100644
index 000000000..3f63a709b
--- /dev/null
+++ b/man2/intro.2
@@ -0,0 +1,186 @@
+.\"
+.\" 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>
+.\"
+.TH INTRO 2 1996-05-22 "Linux 1.2.13" "Linux Programmer's Manual"
+.SH NAME
+intro, _syscall \- Introduction to system calls
+.SH DESCRIPTION
+This chapter describes the Linux system calls.
+For a list of the 164 syscalls present in Linux 2.0, see syscalls(2).
+.SS "Calling Directly"
+In most cases, it is unnecessary to invoke a system call directly, but there
+are times when the Standard C library does not implement a nice function call
+for you.
+.SS "Synopsis"
+.B #include <linux/unistd.h>
+
+A _syscall macro
+
+desired system call
+
+.SS Setup
+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.
+There are six macros that make the actual call into the system easier.
+They have the form:
+.sp
+.RS
+.RI _syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...)
+.RS
+.HP
+where \fIX\fP is 0\(en5, which are the number of arguments taken by the
+system call
+.HP
+\fItype\fP is the return type of the system call
+.HP
+\fIname\fP is the name of the system call
+.HP
+\fItypeN\fP is the Nth argument's type
+.HP
+\fIargN\fP is the name of the Nth argument
+.RE
+.RE
+.sp
+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 EXAMPLE
+.nf
+.sp
+#include <stdio.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);
+ return(0);
+}
+.fi
+.SH "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 NOTES
+The _syscall() macros DO NOT produce a prototype. You may have to
+create one, especially for C++ users.
+.sp
+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, e.g., \-\fBEPERM\fP.
+The _syscall() macros will return the result \fIr\fP of the system call
+when \fIr\fP is nonnegative, but will return \-1 and set the variable
+.I errno
+to \-\fIr\fP when \fIr\fP is negative.
+For the error codes, see
+.BR errno (3).
+.sp
+Some system calls, such as
+.BR mmap ,
+require more than five arguments. These are handled by pushing the
+arguments on the stack and passing a pointer to the block of arguments.
+.sp
+When defining a system call, the argument types MUST be passed by-value
+or by-pointer (for aggregates like structs).
+.sp
+The preferred way to invoke system calls that glibc does not know
+about yet, is via
+.BR syscall (2).
+.SH "CONFORMING TO"
+Certain codes are used to indicate Unix variants and standards to
+which calls in the section conform. These are:
+.TP
+SVr4
+System V Release 4 Unix, as described in the "Programmer's Reference
+Manual: Operating System API (Intel processors)" (Prentice-Hall
+1992, ISBN 0-13-951294-2)
+.TP
+SVID
+System V Interface Definition, as described in "The System V Interface
+Definition, Fourth Edition".
+.TP
+POSIX.1
+IEEE 1003.1-1990 part 1, aka ISO/IEC 9945-1:1990s, aka "IEEE Portable
+Operating System Interface for Computing Environments", as elucidated
+in Donald Lewine's "POSIX Programmer's Guide" (O'Reilly & Associates,
+Inc., 1991, ISBN 0-937175-73-0.
+.TP
+POSIX.1b
+IEEE Std 1003.1b-1993 (POSIX.1b standard) describing real-time facilities
+for portable operating systems, aka ISO/IEC 9945-1:1996, as elucidated in
+"Programming for the real world \- POSIX.4"
+by Bill O. Gallmeister (O'Reilly & Associates, Inc. ISBN 1-56592-074-0).
+.TP
+SUS, SUSv2
+Single Unix Specification.
+(Developed by X/Open and The Open Group. See also
+http://www.UNIX-systems.org/version2/ .)
+.TP
+4.3BSD/4.4BSD
+The 4.3 and 4.4 distributions of Berkeley Unix. 4.4BSD was
+upward-compatible from 4.3.
+.TP
+V7
+Version 7, the ancestral Unix from Bell Labs.
+.SH FILES
+.I /usr/include/linux/unistd.h
+.SH "SEE ALSO"
+.BR syscall (2),
+.BR errno (3)