我希望我的 shell 能够运行
cat file.txt
也
ls -l
我不知道该怎么做,因为cat
第二个参数总是一个文本文件,但是,ls
第二个参数等命令不是,所以我必须以不同的方式执行它。我不确定如何正确处理这两种情况。
我希望我的 shell 能够运行
cat file.txt
也
ls -l
我不知道该怎么做,因为cat
第二个参数总是一个文本文件,但是,ls
第二个参数等命令不是,所以我必须以不同的方式执行它。我不确定如何正确处理这两种情况。
您的 shell 应该为第一个参数寻找匹配的二进制文件,并将所有后续参数作为字符串传递给第一个程序。您的外壳不负责确定参数的含义,它运行的程序是。
您的 shell 应该调用 fork(),然后在子进程中(fork() 的返回值 == 0),它将调用不同的 exec 命令之一来运行用户指定的程序。同时,原始进程正在等待 fork 的子进程使用 waitpid() 完成。
http://linux.die.net/man/3/exec
您会看到其中许多将字符指针数组作为参数。您会将后续参数传递给 exec'd 二进制文件,以供其读取和解析自身。
最好的方法之一是根据一个或多个分隔符(空格、制表符等)剪切字符串,并用生成的单词填充数组。将每个单词放入字符串数组 ( "cat file.twt"
=> "cat", "file.txt"
) 后,就可以调用 exec* 函数(例如:execve)。
对于执行,根据您需要执行的操作,您可能需要:
最后,由于你正在编写一个 shell,你不应该关心每个二进制文件期望的参数,因为它不是 shell 的工作(至少在这一点上)