«Классический» способ вызова программы из существующего процесса в любой из UNIX-подобных ОС заключается в использовании одной из exec()
функций . Когда вы прочитаете о exec()
, большинство учебников начнется с объяснения другой функции: fork()
. Эти функции очень обычно используются вместе, но не слишком зацикливайтесь на этом, потому что они оба полезны сами по себе.
Чтобы ответить на ваш вопрос, достаточно эффективный способ сделать то, что вы ищете:
- Возьмите сгенерированный пользователем ввод из того, что случилось с вашим источником
- (Опционально, звоните
fork()
)
- вызов функции
execvp()
- То, что вы будете здесь делать, будет зависеть от того, позвонили ли вы
fork()
на шаге (2) и что вы намерены делать (если что-нибудь) после выполнения описанной вами задачи.
execvp () сделает всю работу за вас, автоматически найдя в вашей среде PATH имя файла, соответствующее первому аргументу. Если в текущей среде не задана переменная PATH, по умолчанию будет /bin:/usr/bin
. Поскольку единственный способ, которым вызов exec()
может вернуть возвращаемое значение, - это когда этот вызов не удался, вы можете проверить значение errno
как часть шага (4). В случае, если пользовательский ввод не соответствует ни одному исполняемому файлу в среде PATH, errno
будет установлен на ENOENT
. Как именно вы это сделаете, и какие дополнительные шаги стоит предпринять, будет зависеть от того, ответили вы или нет, а также от дополнительных требований к вашей программе.