在C中编写自己的shell,如何运行Unix可执行文件?

Cas*_*ton 6 c unix shell path

在我的一门课程中,我们正在编写自己的shell(基本上是从头开始).

我们已经处理过编写词法分析器和解析器来将输入划分为更容易处理的漂亮"命令"结构.同样,我有一个函数read_command(),它将一次读取一个命令,并找出它是什么类型的命令(管道/和/或/简单/等).

我现在正在尝试编写execute_command(struct command cmd)实际接受命令并运行它的函数.我正在努力学习如何开始实际编写这个功能.

让我们说我只是得到一个非常简单cat foo.txt的命令.我的命令结构将它整齐划分,所以我有一个单词数组,其中包含两个单词.

现在我想cat用参数运行可执行文件foo.txt.我意识到我应该使用$PATH变量来尝试查找可执行文件,然后使用此参数运行它.

我正在努力解决几个主要问题:

  1. 我如何实际搜索命令cat?请记住,该程序使用C.我可以使用哪些功能搜索目录?我如何使用PATH执行此操作?
  2. 当我找到命令时cat,如何将其foo.txt作为参数运行?怎么能在C中完成?

Car*_*rum 11

  1. 退房getenv(3)及其亲属.你可能实际上并不需要直接做目录中的任何操作,但如果你这样做,你可以使用opendir(3),readdir(3),closedir(3),等.
  2. 使用fork(2)和/ execl(3)或其中一个亲属(execve(2)是基本级API).

手册页本身或简单的谷歌搜索任何这些功能将提供大量的例子来帮助你.

  • 你不需要自己处理`PATH`.`execvp`会为你做的. (3认同)