我试图通过解析输入内容,然后使用fork和exec调用来使C成为基本的Shell,以允许Shell调用其他命令,重定向和管道。

解析很容易完成,现在输入的文本以char数组形式存在,但是我对如何继续感到迷惑。

我知道我应该有这样的东西:
    int pid = fork();
    如果(pid == 0){
    execlp(“ ls”,“”);
    }

但是我不知道如何将字符数组传递给execlp命令。

最佳答案

execlp期望命令运行,后跟参数列表。第一个参数通常是程序的名称,它是在ps列表中显示的内容。最后一个参数必须为NULL;告诉execlp已到达参数列表的末尾。

因此,如果您想致电ls -l,请执行以下操作:

execlp("ls", "ls", "-l", NULL);


编辑:

假设您将为每个命令传递可变数量的参数,那么最好改用execvp。这将运行命令并运行一个字符串数组(char *),其最后一个元素为NULL。

因此,如果要运行的命令是ls -l,则可以将其解析为两个字符串,即ls-l。您的参数数组将包含param[0] = "ls"param[1] = "-l"param[2] = NULL。然后致电:

execvp(param[0], param);

关于c - 用C制作Shell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33272882/

10-16 18:22