Ваша проблема в том, что все функции семейства exec()
ожидают только имени исполняемого файла в качестве первого параметра (без каких-либо аргументов). Затем аргументы передаются в соответствии с функцией exec
, которую вы решили вызвать. В случае execlp()
все аргументы (включая имя исполняемого файла) передаются в виде списка с нулевым символом в конце.
По сути, вы хотите вызвать свою функцию следующим образом:
execlp ("ls", "ls", "-l", (char *) 0);
Способ сделать это - разделить строку input
на символ пробела (используя strtok()
) и сохранить результаты в различных переменных.
Если вы хотите обработать случаи множественногоаргументы, то вы не можете достичь этого с помощью execlp()
. Вместо этого используйте execvp()
с соответствующими изменениями. Вы можете найти справочную страницу для всех exec()
функций здесь , которая даст вам достаточно информации.