我想为UNIX创建一个迷你shell,只是为了了解所有内容。我有一些混淆理解我以前认为理所当然的事情。这是一个哲学问题。当我创建一个“shell”时,我认为我有一个没有shell的UNIX,那么在这种情况下,std和std会是什么?没有像system()和exec()这样的函数使用shell来执行程序,所以如果我首先创建一个shell。这些功能如何工作?创建UNIX shell
7
A
回答
3
有在exec
家庭几个功能:execve(2)
,execl(3)
,execle(3)
,execlp(3)
,execv(3)
,execvp(3)
。第一个,execve(2)
由操作系统内核作为系统调用提供。 (好吧,程序调用的函数是由系统C库提供的,但它是一个围绕系统调用的简单包装。)其他函数提供稍微不同的语义,并且按照execve(2)
函数实现。
的壳可以使用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的标准输入,输出和错误。
3
system(3)
的确使用(可能直接或间接通过exec)shell来完成其工作。然而,朋友不要使用shell,而是直接执行指定的程序映像。您只需阅读各自的man
页面即可看到此内容。
与system()不同的是,你会看到像扩展名的通配符那样的糖,而如果你使用exec()将*
作为参数传递给你的程序,你的程序将会看到文字星号(可能不知道该怎么办)。
一个shell可以使用exec()等实现。它从称为TTY(电传打字机,老派终端)或PTY(伪终端,如在现代系统中)的东西获得stdin和stdout。请参阅posix_openpt(2)
。
相关问题
- 1. 创建使用使用UNIX Shell脚本
- 2. 创建的Unix
- 3. Unix Shell脚本
- 4. Shell脚本UNIX
- 5. Unix shell脚本
- 6. Unix shell事件?
- 7. Unix shell位select
- 8. 如何从unix shell创建数据库btable?
- 9. 通过编写unix shell脚本创建提要文件
- 10. 在UNIX bash shell脚本中创建'yes'或'no'菜单
- 11. 为所有Unix Shell创建环境变量
- 12. Python + Shell [创建用户定义的unix命令和安装]
- 13. 在Windows上创建符号链接的Unix shell脚本命令?
- 14. 使用Unix Shell脚本重新创建Windows TYPE到控制台
- 15. 如何在unix shell中创建多行刷新
- 16. 使用和在shell脚本和进程创建在Unix中
- 17. 创建一个UNIX Shell,对fork和child pids感到困惑?
- 18. 创建运行在Unix
- 19. Unix shell脚本 - mailsend
- 20. Unix Shell - Zip命令
- 21. UNIX shell脚本:UDV
- 22. shell脚本在UNIX
- 23. Unix Shell脚本(KSH)
- 24. 的Unix Shell脚本
- 25. 如何创建一个unix命令
- 26. 简单了解UNIX和UNIX shell脚本!
- 27. UNIX文件的创建与Java
- 28. Unix - 文件创建日期
- 29. 创建在solaris别名UNIX
- 30. 创建管道 - 的Unix
哦非常感谢 – Keeto