Понимание того, как работает Linux syscall () - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь понять, что ожидает получить функция Linux syscall(). Я смотрю на man из syscall и не могу понять количество параметров и то, что они представляют. В исходном коде:

extern long int syscall (long int __sysno, ...) __THROW;

Означает ли это, что он может обрабатывать неограниченное количество параметров? Если нет, то что представляет собой параметр?

1 Ответ

0 голосов
/ 26 мая 2020

Второй аргумент ... указывает на функцию Variadi c, которая принимает переменное количество аргументов; распространенными примерами являются printf() и т. д. По замыслу, в то время как количество и типы аргументов неизвестны ни одной переменной c функции, для syscall() правильное количество аргументов и типы указываются c для каждого системного вызова, который индексируется __sysno и должен быть явной константой, например SYS_exit, найденной в системном заголовке.

Хотя количество аргументов в основном неограниченно, существуют практические ограничения, соображения производительности и различия в арках; Короче говоря, чем меньше, тем лучше.

Обратите внимание, что функции Variadi c могут быть весьма универсальными. В качестве одного примера: создайте свою собственную (error_message + exit) процедуруariadi c, которая объединяет статус ошибки в качестве первого аргумента, за которым следует printf args; см. man stdarg и такие службы, как vdprintf () и vfprintf (). Двойные преимущества включают более сжатый источник и меньший текстовый сегмент.

...