我想为 UNIX 创建一个迷你 shell,只是为了了解一切的来龙去脉。我对过去认为理所当然的事情有些困惑。这是一个有点哲学的问题。当我创建一个“shell”时,我假设我有一个没有 shell 的 UNIX,那么在这种情况下,std in 和 std out 是什么?像 system() 和 exec() 这样的函数不使用 shell 来执行程序,所以如果我首先创建一个 shell。这些功能如何运作?
里面有几个函数exec
家庭:execve(2)
, execl(3)
, execle(3)
, execlp(3)
, execv(3)
, execvp(3)
。第一个,execve(2)
由操作系统内核作为系统调用提供。 (嗯,好吧,程序调用的函数是系统C库提供的,但是it是系统调用的简单包装器。)其他函数提供略有不同的语义,并根据execve(2)
功能。
贝壳可以使用execvp(3)
or execlp(3)
提供PATH
搜索可执行文件,但至少bash(1)
hashes可执行文件的完整路径名以提供性能优势。 (看bash(1)
内置hash
了解详情。)
system(3)
是通过实现/bin/sh -c
,正如你所猜测的。
标准输入和输出由生成 shell 的程序设置。如果用户直接在控制台登录,则会由以下方式处理agetty(8)
or mgetty(8)
或以任何一个getty
类似的程序处理直接登录。如果用户通过以下方式登录sshd(8)
, then sshd(8)
负责创建pty
并将终端从站委托给 shell。如果用户通过以下方式创建 shellxterm(1)
或其他终端仿真器,那么这些进程将负责连接 shell 的标准输入、输出和错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)