После того, как вы позвоните exec()
или одному из его родственников, ваша исходная программа не будет больше. Это означает, что ничто в этой программе не может повлиять на что-либо после вызова exec()
, поскольку он никогда не запускается. Может быть, вы не правильно строите массив аргументов? Вот быстрый рабочий пример execvp()
:
#include <unistd.h>
int main(void)
{
char *execArgs[] = { "echo", "Hello, World!", NULL };
execvp("echo", execArgs);
return 0;
}
Из execvp()
справочной страницы :
Функции execv()
, execvp()
и execvpe()
предоставляют массив указателей на строки с нулевым символом в конце, которые представляют список аргументов доступно для новой программы. Первый аргумент, по соглашению, должен указывать на имя файла, связанное с исполняемым файлом. Массив указателей должен заканчиваться указателем NULL
.
Распространенной ошибкой является пропуск части о том, что «первый аргумент, по соглашению, должен указывать на имя файла, связанное с исполняемым файлом». Это та часть, которая гарантирует, что echo
получает "эхо" как argv[0]
, что, по-видимому, зависит от.