2011-11-04 71 views
0

我想用C語言在Linux操作系統中編寫一個shell。Shell中的C編程語言

什麼是在這個項目中使用的庫和函數的名稱?

謝謝。

+3

你想讓圖書館做什麼? – trojanfoe

+0

請說明一下,你想編寫一個完整的shell程序?,你想從一個程序中調用一個shell命令?,你想將數據傳遞給一個shell? –

+2

只是libc,這就夠了。 –

回答

2

你可能會想,至少是:

  • forkexecv - 用於調用子進程。
  • waitpid - 收穫fork + exec產生的死亡子進程。
  • sigaction - 用於安裝信號處理程序到:
    • 捕捉中斷(CTRL + C)。
    • 收穫死亡的孩子進程。
  • open - 用於在重定向到文件/從文件重定向時打開文件。
  • dup2 - 用於在執行重定向時用打開的文件替換STDIN/STDOUT。
  • pipe - 用於創建管道。

Single UNIX Specification Man Pages是一個很好的資源,用於任何其他所需的功能。

1

我不明白你的問題。你開始一件新事物,你可以使用任何你想要的名字。 Project的概念通常針對某些IDE。

要編寫一個外殼,首先必須熟悉C編程語言,並理解好幾個重要的Linux系統調用(如forkexecvepipechdirdup等)。所以先閱讀這本好書。系統調用通過標準的C庫可用,您不需要鏈接額外的一個。

而且,研究小殼的源代碼(如sash)可能會對你有很大的幫助。

0

不幸的是,不是一些神奇的emulateShell() API調用就可以彌補這方面,你將需要考慮(在深度)像execforkpopensignal/sigaction事物和其他主機過程控制的東西。

另外,您可能需要參與終端處理等,例如fcntlioctl

這不是一個真正可以全面覆蓋的主題是一個這樣大小的答案框。我會建議試圖在較小的工作中將其分解,以使您的(和我們)的工作更輕鬆。

也許從一個簡單的程序開始,該程序接受來自用戶的命令並將它們分解爲令牌執行。那將是一個好的第一步。

+2

我不確定他需要* popen *,他需要了解* pipe *系統調用(等等)。 * popen *就像* system *,它使用一個shell,不提供一個。 –

1

實際上,這是一個有趣的問題,對於某些知道Unix的IO機制的人來說,這可能是一個很好的練習。正如您所知,Shell負責解釋輸入,調用系統調用並顯示輸出。這樣的程序運行在內核之上。因此,該練習可能會給出許多關於流程執行族的信息,如exec*

這裏是one tutorial c爲你在C中覆蓋,這one in Python將幫助你設計一個理解的快速原型。

+0

shell不會將其輸入傳遞給內核。它解釋它的輸入並相應調用系統調用。 –

+0

我簡直太簡單了。更正它。 –