2014-09-19 2 views
0

Я хочу загрузить новую программу с помощью fork и exec и передать аргументы новой программе. Но я потерпел неудачу.execvp не передал аргументы вызываемой программе

//fork_exec.c 
int main() 
{ 
    char *args[] = {"/home"}; 
    pid_t pid = fork(); 
    switch(pid) 
    { 
    case -1: 
     return; 
    case 0://child 
     execvp("ls",args); 
     _exit(1); 
    default://parent 
     return; 
    } 
} 

Скомпилировать файл fork_exec.c, затем получить файл a.out. Тогда я типа

./a.out

в terminate.I предположил, что список файлов в/дома будет отображаться на экране. Но показанные файлы war fork_exec.c и a.out на самом деле. Итак, я думаю, что аргументы не были успешно переданы в программу ls. Пожалуйста, скажите мне, что случилось и почему. Спасибо.

+2

Пожалуйста, внимательно прочитайте страницу руководства для ['execvp'] (http://linux.die.net/man/3/execvp), в частности требования к массиву. –

+1

Из man-страницы 'execvp':« Массив указателей должен быть прерван указателем NULL ». Вы пытаетесь использовать« char * args [] = {«ls», «/ home», NULL}; '? –

ответ

4
int main() 
{ 
    char * args[] = {"ls","/home/",NULL}; 
    pid_t pid = fork(); 
    switch(pid) 
    { 
    case -1: 
     return; 
    case 0://child 
     execvp(args[0],args); 
     _exit(1); 
    default://parent 
     return; 
    } 
} 

Это работает. Попробуйте и прочитайте его страницу MAN.

Смежные вопросы