使用fork制作简单的unix外壳,execvp
问题描述:
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;
}
答
在下面的代码是如何使用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结尾的代表参数列表 可用于新节目的字符串。按照惯例,第一个参数 应该指向文件名为的文件正在执行。 指针数组必须由空指针终止。
你能告诉我们第二个printf的输出在哪里打印'arg [0]'?编写shell时常见的错误是忘记修改从用户读取的输入行末尾的换行符。 –