我试图通过解析输入内容,然后使用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/