作爲一個小項目的一部分,我正在Ada編寫一個shell。因此,當我調查系統調用時,我瞭解到有三種方法可以做到這一點。爲什麼我的GNAT的突出文件描述符不起作用?
- POSIX系統調用,這可能是最不可靠的。
- 傳遞的參數一起到C的系統(),我沒有真的想這樣做,因爲這是關於寫在阿達仿真器和不 C.
- 使用GNAT的運行時庫。
我選擇了最後一個選擇,認爲這是最「類阿達」的選擇。我在RosettaCode here上找到了一段代碼。我將它複製並粘貼,並在將「cmd.exe」更改爲「ls」並刪除第二個參數定義後進行編譯。但是,當我運行可執行文件時沒有任何反應。 shell直接回到提示符。我已經在兩臺不同的計算機上進行了測試,一臺運行Fedora 21,另一臺運行Debian Jessie。這就是我對我所做的測試:
- 觀察,如果缺少一個參數字符串,導致它
- 經過如有在GNAT的庫文件描述的是錯誤命名
- 重定向兩個標準錯誤和標準輸入到stdout只是爲了看GNAT是否將它們傾銷到錯誤的FD。
- 透徹地看透了System.OS_lib庫文件,似乎沒有任何理由。
- 用Google搜索了一下,但是GCC網站上的GNAT自己的頁面記錄很差。
現在我在使用C.Interface系統編寫我的shell,但是我對此不滿意。我是Ada的新手,現在只是一直在修補它一個月左右,所以如果在這裏有某種Ada智慧可以幫助我不在其中。
更新:我試着用絕對路徑運行它,都到/ usr/bin和/ bin位置,並且它不起作用。有趣的是,操作系統返回的結果代碼是1,但我不知道這意味着什麼。快速搜索表明它是針對「所有常見錯誤」,而另一個網站則表明這是針對「不正確的功能」。
實際上想過想要添加PATH變量,我覺得沒有嘗試過這種方法是愚蠢的。我會盡快嘗試 – Bronze
@Bronze:你可以使用'Getenv'來詢問繼承的PATH。 – trashgod