【问题标题】:Making a Shell in C用 C 制作一个外壳
【发布时间】:2015-10-22 03:24:57
【问题描述】:

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

解析很容易,现在输入的文本在一个 char 数组中,但我不知道如何继续。

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

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

【问题讨论】:

  • 您可以考虑查看dash 和/或rc 的代码。

标签: c linux shell


【解决方案1】:

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

【讨论】:

  • 对。所以到目前为止,在我的解析代码中,如果您键入“ls”,它将作为 token[0] = 'l' 和 token[1]='s' 输入到 char 数组令牌中。如何将其放入 execlp?
  • @Ben 你解析不正确。标记应该用空格分隔,所以在这种情况下你只有一个标记。
猜你喜欢
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多