2016-09-24 66 views
0

printf(* arg); execvp(* arg,arg);
这里printf()语句打印值= ls.But当运行程序execvp给出没有这样的文件或目录。 否则如果(PID == 0){使用fork制作简单的unix外壳,execvp

printf(*arg); 
    execvp(*arg, arg); 

    char* error = strerror(errno); 
    printf("shell: %s: %s\n", arg[0], error); 
    return 0; 
    if(execvp(arg[0], arg)<0) 
    { 
    printf("***ERROR: execution failedn\n"); 
    } 
    return 0; 
} 
+1

你能告诉我们第二个printf的输出在哪里打印'arg [0]'?编写shell时常见的错误是忘记修改从用户读取的输入行末尾的换行符。 –

回答

0

在下面的代码是如何使用execvp两个例子。

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char **argv) { 
    char *args[] = {"ls", "-l", NULL}; 

    /* an example with a decleared array containing the commande */ 
    if (fork() == 0) { 
     execvp(args[0], args); 
    } 

    /* another example where the commande was passed to main */ 
    printf("argv[0] is the programme/executable name!\nargv[0] = %s\n", argv[0]); 
    if (fork() == 0) { 
     execvp(argv[1], argv + 1); 
    } 

    return EXIT_SUCCESS; 
} 

execv()execvp(),和execvpe()函数提供的 指针的数组,以NULL结尾的代表参数列表 可用于新节目的字符串。

按照惯例,第一个参数 应该指向文件名为的文件正在执行。 指针数组必须由空指针终止。