我希望我的shell能够运行
cat file.txt
以及
ls -l
我不知道如何做到这一点,因为cat
第二个参数始终是一个文本文件,但是ls
等命令不是第二个参数,所以我必须以不同方式执行。我不确定如何正确处理这两种情况。
答案 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)。
执行时,根据您的需要,您可能需要:
最后,既然你正在编写一个shell,你不应该关心每个二进制文件期望什么作为参数,因为它不是shell的工作(至少在这一点上)