intro

Autres langues

Langue: ru

Autres versions - même langue

Version: 1996-05-22 (openSuse - 09/10/07)

Section: 2 (Appels système)

éíñ

intro, _syscall - óÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù: ××ÅÄÅÎÉÅ

ïðéóáîéå

÷ ÜÔÏÊ ÇÌÁ×Å ÏÐÉÓÙ×ÁÀÔÓÑ ÓÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù Linux. óÐÉÓÏË ÜÔÉÈ 164 ÓÉÓÔÅÍÎÙÈ ×ÙÚÏ×Ï× ÎÁÈÏÄÉÔÓÑ × syscalls(2).

ðÒÑÍÏÊ ×ÙÚÏ×

÷ ÂÏÌØÛÉÎÓÔ×Å ÓÌÕÞÁÅ× ÎÅ ÔÒÅÂÕÅÔÓÑ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù ÎÁÐÒÑÍÕÀ, ÎÏ ÂÙ×ÁÀÔ ÓÌÕÞÁÉ, ËÏÇÄÁ óÔÁÎÄÁÒÔÎÁÑ âÉÂÌÉÏÔÅËÁ ñÚÙËÁ C (libc) ÎÅ ÒÅÁÌÉÚÕÅÔ ËÁËÕÀ-ÎÉÂÕÄØ ÐÏÌÅÚÎÕÀ ÆÕÎËÃÉÀ.

ëÒÁÔËÁÑ ó×ÏÄËÁ

#include <linux/unistd.h>

A _syscall macro

desired system call

îÁÓÔÒÏÊËÁ

ïÞÅÎØ ×ÁÖÎÏ ÚÎÁÔØ ÐÒÏÔÏÔÉÐ ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á. ÷ÁÍ ÎÕÖÎÏ ÚÎÁÔØ, ÓËÏÌØËÏ Õ ÜÔÏÇÏ ×ÙÚÏ×Á ÁÒÇÕÍÅÎÔÏ×, ËÁËÏ×Ù ÉÈ ÔÉÐÙ, ËÁËÏ× ÔÉÐ, ×ÏÚ×ÒÁÝÁÅÍÙÊ ÆÕÎËÃÉÅÊ. åÓÔØ ÛÅÓÔØ ÍÁËÒÏÓÏ×, ÏÂÌÅÇÞÁÀÝÉÈ ÓÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù. ïÎÉ ×ÙÇÌÑÄÑÔ ÔÁË:
_syscallX(type,name,type1,arg1,type2,arg2,...)
ÇÄÅ X ÒÁ×ÎÏ ÏÔ 0 ÄÏ 5 É ÏÚÎÁÞÁÅÔ ËÏÌÉÞÅÓÔ×Ï ÁÒÇÕÍÅÎÔÏ×, ÐÒÉÎÉÍÁÅÍÙÈ ÓÉÓÔÅÍÎÙÍ ×ÙÚÏ×ÏÍ
type ÜÔÏ ÔÉÐ, ×ÏÚ×ÒÁÝÁÅÍÙÊ ÓÉÓÔÅÍÎÙÍ ×ÙÚÏ×ÏÍ
name ÎÁÚ×ÁÎÉÅ ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á
typeN ÔÉÐ N-ÏÇÏ ÁÒÇÕÍÅÎÔÁ
argN ÉÍÑ N-ÏÇÏ ÁÒÇÕÍÅÎÔÁ

üÔÉ ÍÁËÒÏÓÙ ÓÏÚÄÁÀÔ ÆÕÎËÃÉÀ, ËÏÔÏÒÁÑ ÎÁÚÙ×ÁÅÔÓÑ name, Ó ÚÁÄÁÎÎÙÍÉ ÁÒÇÕÍÅÎÔÁÍÉ. ðÏÓÌÅ ÔÏÇÏ, ËÁË ×Ù ×ËÌÀÞÉÔÅ ÍÁËÒÏÓ _syscall() × Ó×ÏÊ ÆÁÊÌ Ó ÉÓÈÏÄÎÙÍ ËÏÄÏÍ, ×Ù ÍÏÖÅÔÅ ×ÙÚÙ×ÁÔØ ÆÕÎËÃÉÉ ÓÉÓÔÅÍÙ, ÐÏÌØÚÕÑÓØ ÉÍÅÎÅÍ name.

ðòéíåò




#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);



/* 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); }

ðÒÉÍÅÒ ÷ÙÄÁÞÉ


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, ÅÓÌÉ r ÎÅÏÔÒÉÃÁÔÅÌØÎÏ, Á × ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ×ÏÚ×ÒÁÝÁÀÔ -1 É ÕÓÔÁÎÁ×ÌÉ×ÁÀÔ ÐÅÒÅÍÅÎÎÕÀ errno × ÚÎÁÞÅÎÉÅ -r. ëÏÄÙ ÏÛÉÂÏË ÏÐÉÓÁÎÙ × errno(3).

îÅËÏÔÏÒÙÅ ÓÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù, ÔÁËÉÅ ËÁË mmap, ÔÒÅÂÕÀÔ ÂÏÌØÛÅ ÐÑÔÉ ÁÒÇÕÍÅÎÔÏ×. ïÎÉ ÏÂÒÁÂÁÔÙ×ÁÀÔÓÑ ÐÕÔÅÍ ÐÏÍÅÝÅÎÉÑ ÁÒÇÕÍÅÎÔÏ× ÎÁ ÓÔÅË É ÐÅÒÅÄÁÞÉ ÕËÁÚÁÔÅÌÑ ÎÁ ÂÌÏË ÁÒÇÕÍÅÎÔÏ×.

ðÒÉ ÏÐÉÓÁÎÉÉ ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á ÁÒÇÕÍÅÎÔÙ äïìöîù ÐÅÒÅÄÁ×ÁÔØÓÑ "ÐÏ ÚÎÁÞÅÎÉÀ" ÉÌÉ Ó ÐÏÍÏÝØÀ ÕËÁÚÁÔÅÌÑ (ÄÌÑ ÁÇÒÅÇÁÔÎÙÈ ÔÉÐÏ×, ÎÁÐÒÉÍÅÒ, ÓÔÒÕËÔÕÒ).

ðÒÅÄÐÏÞÔÉÔÅÌØÎÙÊ ÓÐÏÓÏ ×ÙÚÏ×Á ÓÉÓÔÅÍÎÙÈ ×ÙÚÏ×Ï×, Ï ËÏÔÏÒÙÈ ÐÏËÁ ÅÝ£ ÎÅ ÚÎÁÅÔ glibc, ÓÏÓÔÏÉÔ × ÉÓÐÏÌØÚÏ×ÁÎÉÉ syscall(2).

óïïô÷åôóô÷éå óôáîäáòôáí

äÌÑ ÏÂÏÚÎÁÞÅÎÉÅ ×ÁÒÉÁÎÔÏ× Unix É ÒÁÚÎÏÏÂÒÁÚÎÙÈ ÓÔÁÎÄÁÒÔÏ×, ËÏÔÏÒÙÍ ÓÏÏÔ×ÅÔÓÔ×ÕÀÔ ÓÉÓÔÅÍÎÙÅ ×ÙÚÏ×Ù, ÏÐÉÓÁÎÎÙÅ × ÜÔÏÊ ÓÅËÃÉÉ ÒÕËÏ×ÏÄÓÔ×Á, ÉÓÐÏÌØÚÕÀÔÓÑ ÒÁÚÌÉÞÎÙÅ ÓÏËÒÁÝÅÎÉÑ:
SVr4
Unix-System V Release 4, ÏÐÉÓÁÎÎÁÑ × "Programmer's Reference Manual: Operating System API (Intel processors)" (Prentice-Hall 1992, ISBN 0-13-951294-2)
SVID
System V Interface Definition (ïÐÉÓÁÎÉÅ éÎÔÅÒÆÅÊÓÁ óÉÓÔÅÍÙ V), ÏÐÉÓÁÎÎÏÅ × "The System V Interface Definition, Fourth Edition".
POSIX.1
IEEE 1003.1-1990 ÞÁÓÔØ 1, ÔÁËÖÅ ÉÚ×ÅÓÔÎÙÊ ËÁË ISO/IEC 9945-1:1990s, ÔÁËÖÅ ÉÚ×ÅÓÔÎÙÊ ËÁË "IEEE Portable Operating System Interface for Computing Environments" (éÎÔÅÒÆÅÊÓ ðÅÒÅÎÏÓÉÍÏÊ ïÐÅÒÁÃÉÏÎÎÏÊ óÉÓÔÅÍÙ ÄÌÑ ÷ÙÞÉÓÌÉÔÅÌØÎÙÈ óÒÅÄ IEEE), ÒÁÚßÑÓÎÅÎÎÙÊ × ËÎÉÇÅ Donald Lewine "POSIX Programmer's Guide" (O'Reilly & Associates, Inc., 1991, ISBN 0-937175-73-0.
POSIX.1b
IEEE Std 1003.1b-1993 (ÓÔÁÎÄÁÒÔ POSIX.1b), ÏÐÉÓÙ×ÁÀÝÉÊ ×ÏÚÍÏÖÎÏÓÔÉ ÒÁÂÏÔÙ × ÒÅÁÌØÎÏÍ ×ÒÅÍÅÎÉ ÐÏÄ ÐÅÒÅÎÏÓÉÍÙÍÉ ÏÐÅÒÁÃÉÏÎÎÙÍÉ ÓÉÓÔÅÍÁÍÉ, ÒÁÚßÑÓÎÅÎÎÙÊ × ËÎÉÇÅ Bill O. Gallmeister "Programming for the real world - POSIX.4" (O'Reilly & Associates, Inc. ISBN 1-56592-074-0).
4.3BSD/4.4BSD
÷ÅÒÓÉÉ 4.3 É 4.4. ÄÉÓÔÒÉÂÕÃÉÉ Berkeley Unix. 4.4BSD ÂÙÌÁ ÏÂÒÁÔÎÏ ÓÏ×ÍÅÓÔÉÍÁ Ó 4.3.
SUS, SUSv2
Single Unix Specification. (òÁÚÒÁÂÏÔÁÎÁ X/Open É The Open Group. óÍÏÔÒÉ ÔÁËÖÅ http://www.UNIX-systems.org/version2/.)
V7
÷ÅÒÓÉÑ 7, ÉÓÈÏÄÎÁÑ ×ÅÒÓÉÑ Unix ÏÔ Bell Labs.

æáêìù

/usr/include/linux/unistd.h

óíïôòé ôáëöå

errno(3) syscall(2),

ðåòå÷ïä

Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999, ÷ÉËÔÏÒ ÷ÉÓÌÏÂÏËÏ× <corochoone@perm.ru> 2003