在C中制作壳牌

时间:2015-10-22 03:24:58

标签: c linux shell

我试图通过解析输入在C中创建一个基本shell,然后添加允许shell调用其他命令,重定向和管道的fork和exec调用。

解析很容易,而且现在输入的文本是一个char数组,但我对如何继续进行了迷失。

我知道我应该有这样的事情:     int pid = fork();     if(pid == 0){     execlp(" ls","");     }

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

1 个答案:

答案 0 :(得分:0)

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);