我想为UNIX创建一个迷你shell,只是为了了解一切的来龙去脉.我有些困惑,理解我曾经认为理所当然的事情.这是一个哲学问题.当我创建一个"shell"时,我假设我有一个没有shell的UNIX,那么在这种情况下std in和std会是什么?没有像system()和exec()这样的函数使用shell来执行程序,所以如果我首先创建一个shell.这些功能如何运作?
系列中有几个函数exec:execve(2)、execl(3)、execle(3)、execlp(3)、execv(3)、execvp(3)。第一个execve(2)是由操作系统内核作为系统调用提供的。(好吧,程序调用的函数是由系统 C 库提供的,但它是系统调用的简单包装。)其他函数提供稍微不同的语义,并根据函数来实现execve(2)。
shell 可以使用execvp(3)或execlp(3)提供PATH对可执行文件的搜索,但至少对可执行文件的完整路径名bash(1) 进行哈希处理以提供性能优势。(有关详细信息,请参阅bash(1)内置hash。)
system(3)正如您所猜测的那样,是通过 实现的/bin/sh -c。
标准输入和输出由生成 shell 的程序设置。如果用户直接在控制台上登录,它将由agetty(8)或mgetty(8)或 任何getty处理直接登录的类似程序来处理。如果用户通过 登录sshd(8),则sshd(8)负责创建pty并将终端从站委托给 shell。如果用户通过xterm(1)或其他终端仿真器创建 shell,那么这些进程将负责连接 shell 的标准输入、输出和错误。
| 归档时间: |
|
| 查看次数: |
1625 次 |
| 最近记录: |