使用fork,execvp制作简单的unix shell

时间:2016-09-24 12:37:17

标签: c linux shell unix

的printf(* ARG);        execvp(* arg,arg);
这里printf()语句打印value = ls.But当运行程序execvp时,没有这样的文件或目录。  否则if(pid == 0){

   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 个答案:

答案 0 :(得分: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结尾的字符串的指针,表示参数列表   可用于新计划。

     

第一个参数,按惯例,   应指向与正在执行的文件关联的文件名。   指针数组必须以空指针终止。