.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" 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 .\" Added "Calling Directly" and supporting paragraphs .\" .\" Modified Sat Jul 24 15:19:12 1993 by Rik Faith .\" .\" Modified 21 Aug 1994 by Michael Chastain : .\" Added explanation of arg stacking when 6 or more args. .\" .\" Modified 10 June 1995 by Andries Brouwer .\" .\" Дата последней коррекции перевода 14.12.2003 .\" Оригинальный перевод Алексея Махоткина 1999-2001 .\" Дополнения и правки перевода сделал Виктор Вислобоков .\" http://www.linuxshare.ru/projects/trans/mans.html .\" .TH INTRO 2 1996-05-22 "Linux 1.2.13" "Руководство программиста Linux" .SH ИМЯ intro, _syscall \- Системные вызовы: введение .SH ОПИСАНИЕ В этой главе описываются системные вызовы Linux. Список этих 164 системных вызовов находится в syscalls(2). .SS "Прямой вызов" В большинстве случаев не требуется использовать системные вызовы напрямую, но бывают случаи, когда Стандартная Библиотека Языка C (libc) не реализует какую-нибудь полезную функцию. .SS "Краткая Сводка" .B #include A _syscall macro desired system call .SS Настройка Очень важно знать прототип системного вызова. Вам нужно знать, сколько у этого вызова аргументов, каковы их типы, каков тип, возвращаемый функцией. Есть шесть макросов, облегчающих системные вызовы. Они выглядят так: .sp .RS .RI _syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...) .RS .HP где \fIX\fP равно от 0 до 5 и означает количество аргументов, принимаемых системным вызовом .HP \fItype\fP это тип, возвращаемый системным вызовом .HP \fIname\fP название системного вызова .HP \fItypeN\fP тип N-ого аргумента .HP \fIargN\fP имя N-ого аргумента .RE .RE .sp Эти макросы создают функцию, которая называется \fIname\fP, с заданными аргументами. После того, как вы включите макрос _syscall() в свой файл с исходным кодом, вы можете вызывать функции системы, пользуясь именем \fIname\fP. .SH ПРИМЕР .nf .sp #include #include /* for _syscallX macros/related stuff */ #include /* 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 "Пример Выдачи" .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 ЗАМЕЧАНИЯ Макросы _syscall() НЕ создают прототипа. Вам может потребоваться создать его вручную, особенно в программе на C++. .sp Системные вызовы не обязательно возвращают только положительные или отрицательные коды ошибок. Чтобы выяснить настоящее положение дел, может потребоваться обратиться к исходным текстам. Обычно код ошибки -- это стандартный код ошибки со знаком минус, например, \-\fBEPERM\fP. Макросы _syscall() возвращают результат системного вызова .IR r , если .I r неотрицательно, а в противном случае возвращают \-1 и устанавливают переменную .I errno в значение \-\fIr\fP. Коды ошибок описаны в .BR errno (3). .sp Некоторые системные вызовы, такие как .BR mmap , требуют больше пяти аргументов. Они обрабатываются путем помещения аргументов на стек и передачи указателя на блок аргументов. .sp При описании системного вызова аргументы ДОЛЖНЫ передаваться "по значению" или с помощью указателя (для агрегатных типов, например, структур). .sp Предпочтительный способ вызова системных вызовов, о которых пока ещё не знает glibc, состоит в использовании .BR syscall (2). .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" Для обозначение вариантов Unix и разнообразных стандартов, которым соответствуют системные вызовы, описанные в этой секции руководства, используются различные сокращения: .TP SVr4 Unix-System V Release 4, описанная в "Programmer's Reference Manual: Operating System API (Intel processors)" (Prentice-Hall 1992, ISBN 0-13-951294-2) .TP SVID System V Interface Definition (Описание Интерфейса Системы V), описанное в "The System V Interface Definition, Fourth Edition". .TP 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. .TP 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). .TP 4.3BSD/4.4BSD Версии 4.3 и 4.4. дистрибуции Berkeley Unix. 4.4BSD была обратно совместима с 4.3. .TP SUS, SUSv2 Single Unix Specification. (Разработана X/Open и The Open Group. Смотри также http://www.UNIX-systems.org/version2/.) .TP V7 Версия 7, исходная версия Unix от Bell Labs. .SH ФАЙЛЫ .I /usr/include/linux/unistd.h .SH "СМОТРИ ТАКЖЕ" .BR errno (3) .BR syscall (2), .SH ПЕРЕВОД Copyright (C) Alexey Mahotkin 1999, Виктор Вислобоков 2003