我试图通过解析输入在C中创建一个基本shell,然后添加允许shell调用其他命令,重定向和管道的fork和exec调用。
解析很容易,而且现在输入的文本是一个char数组,但我对如何继续进行了迷失。
我知道我应该有这样的事情: int pid = fork(); if(pid == 0){ execlp(" ls",""); }
但我不知道如何将一组字符传递给execlp命令。
答案 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);