簡體   English   中英

如何在C中實現自己的基本unix shell?

[英]How can I implement my own basic unix shell in C?

我是流程和線程管理的新手。 我的Shell應該了解PATH環境變量。 它可以設置和修改。 它以兩種方式運行 - 交互式和批處理模式。 Shell能夠執行多個作業,如ls; ps; wc file; cal。 我也想弄清信號。 所以我也應該處理^ K,^ c。

我知道我將不得不使用高管,叉子和管道但是無法上手。

所有的unix shell都是開源的 - 所以一個好的起點可能就是閱讀代碼。

如果您正在尋找關於該主題的優秀入門文章,請嘗試從Linux公報中編寫自己的外殼

另一個好的起點是看看迷你shell的源代碼,因為它是最小的一個讓你的頭腦。

你的主循環是:

  • 讀取一行(對於一個簡單的shell使用fgets(3)對於一個簡單的shell使用readline(3)
  • 解析命令
  • fork並執行管道

要解析命令,有兩種常見的選擇。 編寫遞歸下降解析器或使用yacc(1)生成一個。 使用yacc初始解析器要容易yacc ,但是你完全可以調試它並且它真的想要無上下文。 我更喜歡遞歸下降,但世界上其他所有人都喜歡使用yacc。 (技術上, bison 。)如果外殼真的很簡單,就像一個作業外殼,yacc可能有點矯枉過正。

要進行詞法分析,您也可以自己動手或使用flex。

您不需要使用任何線程。

許多描述主系統調用的Unix書籍也實現了一個shell來說明如何以及為什么使用各種調用。 Stevens和Rochkind是兩本這樣的書:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM