Я хочу написать программу, которая выполняет команду Linux ls
. Я действительно хочу только ввести ls
, а не /bin/ls
, поэтому я хочу сделать это, используя execve
(execvp
- это не вариант).execve не принимает параметры среды
Я пробовал:
char *env[] = { "SHELL=/bin/bash",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games",
"_=/usr/bin/env",
(char *)0 };
execve(parmList[0], parmList, env);
Но это не похоже на работу, ls
не признается, но /bin/ls
есть. Ничего плохого в parmList
, потому что я пробовал это с execvp
, и это сработало.
Любые идеи?
1) Почему 'execvp' не вариант? 2) Вы посмотрели разницу между 'execvp' /' execvpe' и 'execv' /' execve'? –
Пожалуйста, сообщите полные данные. Как объявляется/заполняется 'parmList'? Каков результат ('perror', возвращаемые значения ...)? – hexasoft
1) Потому что я хочу, чтобы возможность сказать один день: я использую программу «abc», например. «/ home/user/programs» каждый день, и все, что я не хочу вводить в полный путь каждый раз. Тогда должно быть возможно просто добавить другую запись массива. 2) execvpe, похоже, работает, но моему компилятору это не нравится по какой-либо причине. –