【发布时间】:2015-10-22 03:24:57
【问题描述】:
我试图通过解析输入在 C 中创建一个基本的 shell,然后添加允许 shell 调用其他命令、重定向和管道的 fork 和 exec 调用。
解析很容易,现在输入的文本在一个 char 数组中,但我不知道如何继续。
我知道我应该有这样的东西: int pid = fork(); 如果 ( pid == 0 ) { execlp("ls", ""); }
但我不知道如何将字符数组传递给 execlp 命令。
【问题讨论】:
我试图通过解析输入在 C 中创建一个基本的 shell,然后添加允许 shell 调用其他命令、重定向和管道的 fork 和 exec 调用。
解析很容易,现在输入的文本在一个 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);
【讨论】: