2013-06-10 2 views
0

В настоящее время я пишу собственный терминал в C. Я узнал, что существует несколько вариантов метода exec(), которые я могу использовать. Его просто приводят меня вхождение использовать execv():Execv для собственного терминала

int main(int argc , char* argv[]){ 
    char* dir = getcwd(NULL, 0); 
    char* command[] = {"echo", "Hello", "World", "!!!", NULL}; 
    execv(dir, command); 
} 

В моем понимании это должно работать. Он компилируется, но ничего не происходит.

ответ

1

Аргумент path для execv должен быть спецификацией пути к исполняемому файлу, который вы хотите запустить, а не только к каталогу, возвращаемому getcwd. Из справочной системы:

Начальный аргумент для этих функций - это путь к файлу, который должен быть выполнен.

Другими словами, вы ищете что-то вроде:

execv ("/bin/echo", command); 

Код, который вы в настоящее время пытается запустить свой текущий каталог, то, что вряд ли хорошо закончится, и что-то вы, возможно, заметил, если вы проверили возвращаемое значение из execv вместе с errno: подталкивать, подталкивать, подмигивание, подмигивание :-)

в плане того, что делать для других программ, вы просто заменить их полное имя для /bin/echo.

Вы также должны знать, что exec - это номер family of functions, каждый из которых имеет небольшие вариации.

Некоторые позволяют передавать среды, некоторые из них автоматически ищут путь для вашего исполняемого файла (в зависимости от указанного имени), а некоторые используют списки переменных аргументов, а не массивы. Если вы хотите использовать автоматический поиск путей, вы бы просмотрели execvp, а не execv, тогда вам не нужно беспокоиться о том, где находится исполняемый файл.

+0

Ok ... в то время я читал о том, что execvp может использовать команды PATH ... Здесь эхо было всего лишь примером .. в будущем я хочу, чтобы он делал больше, чем просто эхо .. так что делать там ? –

+0

ok Я нашел решение здесь http://stackoverflow.com/questions/9269927/c-using-execvp-with-user-input –