Системные вызовы сами по себе являются концепцией. Они представляют действия, которые процессы могут запрашивать у ядра.
Эти системные вызовы реализованы в ядре UNIX-подобной системы. Эта реализация (написанная на C и на asm для небольших частей) фактически выполняет действие в системе.
Затем процессы используют интерфейс, чтобы запросить у системы выполнение системных вызовов. Этот интерфейс указан в POSIX. Это набор функций стандартной библиотеки C. На самом деле они являются оболочками, они могут выполнять некоторые проверки, а затем вызывать в ядре специфичную для системы функцию, которая сообщает ему о выполнении действий, требуемых системным вызовом.А уловка в том, что те функции, которые являются интерфейсом, называются так же, как и сами системные вызовы, и часто называются «системными вызовами».
Вы можете вызвать функцию в ядре, которая выполняет системный вызов, напрямую через специфичный для системы механизм. Проблема в том, что это делает ваш код абсолютно непереносимым.
Итак, системный вызов - это:
Замените
sudo systemctl enable <server>.service
sudo systemctl start <server>.service
Таким образом, для /etc/openvpn/foo.conf
будет
sudo systemctl enable foo.service
sudo systemctl start foo.service