如何在C中的shell中执行带有多个参数的命令?

时间:2013-05-19 02:15:36

标签: c parsing shell command-line command-line-arguments

我希望我的shell能够运行

cat file.txt 

以及

ls -l

我不知道如何做到这一点,因为cat第二个参数始终是一个文本文件,但是ls等命令不是第二个参数,所以我必须以不同方式执行。我不确定如何正确处理这两种情况。

2 个答案:

答案 0 :(得分:0)

你的shell应该为第一个参数寻找匹配的二进制文件,并将所有后续参数作为字符串传递给第一个程序。您的shell不负责确定参数的含义,它运行的程序是。

你的shell应该调用fork(),然后在子进程中(fork()== 0的返回值),它将调用一个不同的exec命令来运行用户指定的程序。同时,原始进程正在等待fork'd子进行waitpid()。

http://linux.die.net/man/3/exec

您会看到其中许多人将一组字符指针作为参数。您将后续参数传递给exec'd二进制文件,以便它读入并解析自己。

答案 1 :(得分:0)

最好的方法之一是根据一个或多个分隔符(空格,制表符等)剪切字符串,并用生成的单词填充数组。将每个单词放在字符串数组上后"cat file.twt" => "cat", "file.txt"),就可以调用exec *函数(例如:execve)。

执行时,根据您的需要,您可能需要:

  • exec *函数(execve,execlp等)
  • fork(因为你正在写一个shell,你需要让你的进程保持活着)
  • wait / waitpid以避免僵尸进程
  • dup * / pipe如果您需要使用文件描述符。

最后,既然你正在编写一个shell,你不应该关心每个二进制文件期望什么作为参数,因为它不是shell的工作(至少在这一点上)