Exec () читать из файла

Я работаю над созданием базовой оболочки. Я застрял при попытке получить exec () для чтения из входного файла. Вот что у меня есть. Я не уверен, какие аргументы я должен приводить execvp (). Здесь stringList [0] будет чем-то вроде «ls» или «cat». Если stringList [0] равен ls, файл будет содержать что-то похожее на ls -a -l

int fd = open(iFile, O_RDONLY);
dup2(fd, 0);
close(fd);

execvp(stringList[0], ...);
cout << "Exec error!\n";
exit(1);

1

Решение

Похоже, вы хотите прочитать команду из файла и затем выполнить эту команду. Если это ваша цель, вы должны выполнять оболочка.

Ваш текущий подход open затем dup2 не вызывает exec читать из файла, потому что exec никогда не читает со стандартного ввода. Он читает только из исполняемого файла (для загрузки образа программы). То, что делает ваш текущий подход, это переадресовывать вход, так что если exec успешно, новая программа будет иметь iFile как его стандартный входной файл.

Вы можете просто сделать это:

execl(shell, basename(shell), iFile, (char*)0);

Пример: если iFile это строка "myCommand.sh", а также shell является /bin/bash, затем basename(shell) дает bash, и это похоже на запуск этого в командной строке:

$ bash myCommand.sh

За shell вы, вероятно, хотите использовать оболочку текущего пользователя по умолчанию. Вы можете получить эту информацию, используя getpwuid или же getpwuid_r,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]