作为一个小项目的一部分,我正在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