Системный вызов, это требование к ОС (ядру) произвести аппаратно/системно
специфическую или привилегированную операцию. В Linux-1.2 были определены 140
системных вызовов. Такие вызовы, как close() реализованы в Linux libc. Эта
реализация часто включает в себя макрос, который в конце концов вызывает
syscall(). Параметры, передаваемые syscall, это номер системного вызова,
перед которым ставятся требуемые аргументы. Номера системных вызовов можно
найти в На i386 системные вызовы ограничены 5-ю аргументами кроме номера
вызова из-за аппаратного числа регистров. На другой архитектуре вы
можете поискать макрос _syscall в _syscall1 раскрывается в функцию close(), и мы получаем твикс: один
close() в libc и один в нашей программе. Возвращаемое syscall() (или
_syscall) значение есть -1, если вызов неудачен и 0 или больше в случае
успеха. В случае неудачи ошибку можно определить по глобальной переменной
errno.
Приведем системные вызовы, возможные в BSD и SYS V, но не допустимые в
LINUX: audit(), audition(), fchroot(), getauid(), getdents(), getmsg(),
mincore(), poll(), putmsg(), setaudit(), setauid().
#include <syscall.h>
extern int syscall(int, ...);
int my_close(int filedescriptor)
{
return syscall(SYS_close, filedescriptor);
}
#include <linux/unistd.h>
_syscall1(int, close, int, filedescriptor);
Converted on:
Fri Mar 29 14:43:04 EST 1996