Документация по LinuxLinuxDoc.Ru 🔍

intro - введение в системные вызовы

НАЗВАНИЕ
intro - введение в системные вызовы

ОПИСАНИЕ
В этой главе описываются системные вызовы Linux. Список
164-х системных вызовов в Linux 2.0 находится в
syscalls(2).

Прямой вызов
В большинстве случаев не требуется посылать системные
вызовы напрямую, но бывают случаи, когда Стандартная
Библиотека Языка C (libc) не реализует какую-нибудь
полезную функцию.

Синтаксис
#include A _syscall macro желаемый
системный вызов

Настройка
Очень важно знать прототип функции. Вам нужно знать,
сколько у этого вызова аргументов, каковы их типы и тип,
возвращаемый функцией. Есть шесть макросов, облегчающих
системные вызовы. Они имеют следующий вид:

_syscallX(type,name,type1,arg1,type2,arg2,...)

, где X принимает значение от 0 до 5 и
указывает на количество аргументов,
принимаемых системным вызовом

type - это тип, возвращаемый системным
вызовом ;

name - название системного вызова;

typeN - тип N-ого аргумента ;

argN - имя N-ого аргумента

Эти макросы создают функцию с заданными аргументами,
которая называется name. После того, как Вы включите
макрос _syscall() в свой файл с исходным кодом, Вы можете
вызывать функции системы, пользуясь именем name.

ПРИМЕР

_syscall1(int, sysinfo, struct sysinfo *, info);
/* Замечание: если Вы копируете тексты напрямую из исходных
текстов nroff, помните, что необходимо УДАЛИТЬ все лишние
обратные слэши в выражении printf. */
int main(void)
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("code error = %d\n", error);
printf("Uptime = %ds\nLoad: 1 min %d / 5 min %d / 15 min %d\n"
"RAM: total %d / free %d / shared %d\n"
"Memory in buffers = %d\nSwap: total %d / free %d\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, требуют больше
пяти аргументов. Они обрабатываются путем помещения
аргументов в стек и передачи указателя на блок аргументов.

При описании системного вызова аргументы ДОЛЖНЫ
передаваться "по значению" или с помощью указателя (для
агрегатных типов, например, структур).

СООТВЕТСТВИЕ СТАНДАРТАМ
Для обозначение вариантов Unix и разнообразных стандартов,
которым соответствуют системные вызовы, описанные в этой
секции руководства, используются различные сокращения:

SVr4 Unix-System V Release 4, описанная в "Programmer's
Reference Manual: Operating System API (Intel pro-
cessors)" (Prentice-Hall 1992, ISBN 0-13-951294-2)

SVID System V Interface Definition (Описание Интерфейса
Системы V), описанное в "The System V Interface
Definition, Fourth Edition", доступное по адресу
ftp://ftp.fpk.novell.com/pub/unix-standards/svid в
формате Postscript.

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 "Program-
ming for the real world - POSIX.4" (O'Reilly &
Associates, Inc. ISBN 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-sys-
tems.org/version2/.)

V7 Версия 7, исходная версия Unix от Bell Labs.

ФАЙЛЫ
/usr/include/linux/unistd.h
Читать новости Linux в Telegram
Linux - intro - введение в системные вызовы
Мы в соцсетях ✉