我想爲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
- 2. Unix shell位select
- 3. Unix shell腳本
- 4. Unix shell事件?
- 5. 爲所有Unix Shell創建環境變量
- 6. 如何從unix shell創建數據庫btable?
- 7. Python + Shell [創建用戶定義的unix命令和安裝]
- 8. 創建運行在Unix
- 9. Unix Shell - Zip命令
- 10. UNIX shell腳本:UDV
- 11. 如何創建一個unix命令
- 12. 簡單瞭解UNIX和UNIX shell腳本!
- 13. Unix - 文件創建日期
- 14. 創建管道 - 的Unix
- 15. 創建Unix命令和Xcode
- 16. 關於Unix shell腳本
- 17. unix shell中的數組?
- 18. shell腳本中的Unix substr?
- 19. 魔法文件Unix shell
- 20. unix shell設置命令
- 21. Unix Shell腳本函數
- 22. unix shell腳本錯誤
- 23. UNIX shell腳本while循環
- 24. 的UNIX shell:通過字典
- 25. 關於UNIX Shell腳本
- 26. Unix Shell文件傳輸
- 27. 沒有從UNIX shell腳本
- 28. Shell腳本UNIX提示
- 29. 報價在UNIX shell中
- 30. unix bash shell腳本寫作
哦非常感謝 – Keeto