我在C中制作自己的shell。输入窗口出现,但当我输入命令ls
时,它没有响应。
#define MAX 64
char buf[MAX];
void * get_next_command(void);
int main(int argc, char* argv[])
{
while(1){
char *cmd = get_next_command();
int child_pid = fork();
if(child_pid <0){
perror("errorn");
return -1;
}
else if(child_pid == 0){
execle(cmd,cmd,NULL);
exit(0);
}
else{
wait(NULL);
}
}
return 0;
}
void * get_next_command()
{
printf("Shell > ");
fgets(buf,MAX,stdin);
buf[strlen(buf)-1]='n';
}
我想知道如何在自己的shell中运行命令。任何回复都将表示感谢。顺致敬意,
虽然制作一个shell看起来很简单,但实际上你必须在这方面做更多的工作才能使它发挥作用。问题是execle要求执行文件的路径。例如ls实际上是/bin/ls
,所以这是您需要传递的内容,作为程序工作的第一个参数。如果你想更深入地了解这一点,并制作一个真正的自定义外壳,你必须通过你的主要环境,比如:
int main(int ac, char **av, char **env);
这将获得您的环境(您可以在终端中键入env以查看它是什么样子(,然后您将能够获得PATH变量,以获得二进制文件的所有由:
分隔的路径(如/bin/ls使用的/bin(。
至于execle,如果你想传递你的论点,你必须这样传递:
例如,如果命令为ls -l -a
然后你将运行:
execle("/bin/ls", "ls", "-l", "-a", NULL);
但您也可以对execv执行同样的操作,它使用char**而不是参数的字符串。如果你更深入地了解这一点,你可以用execve传递你的自定义环境(第三个参数是你的环境(。
以下是您应该如何调用函数(当然,用变量替换硬编码的值(: