#c #kernel #system-calls #openbsd
#c #ядро #системные вызовы #openbsd
Вопрос:
Допустим, у меня есть определяемый пользователем системный вызов: foo (с кодовым номером 500).
Чтобы вызвать его, я просто записываю в файл C:
syscall(SYS_code, args);
Как я могу вызвать его, используя just foo(args)
?
Комментарии:
1. «Как я могу вызвать его, используя только foo(аргументы)?» — Создайте функцию
foo
, которая выполняет требуемый системный вызов. Таким образом, другой код может просто вызыватьfoo
.
Ответ №1:
Вы не можете. Нет, если вы сначала не убедите разработчиков ядра, что ваш системный вызов заслуживает добавления, затем он будет добавлен, а затем библиотеки пользовательского пространства, такие как стандартная библиотека C (glibc в большинстве дистрибутивов Linux), решат реализовать для него оболочку, как они делают для большинства системных вызовов.
Другими словами: поскольку вышесказанное невозможно, все, что вы можете сделать, это определить функцию-оболочку самостоятельно в своей собственной программе.
#define SYS_foo 500
long foo(int a, char *b) {
return syscall(SYS_foo, a, b);
}