我在IT研究的第一年和我一起练习。我必须使用C为Linux编写自己的shell。我有几点要做,其中一个是我的shell必须使用来自man bash的2-3个shell内置命令。 如何在代码中实现此功能?通过使用system()或execl()等函数,或者在这种情况下它是否正确,还有其他选项吗?
答案 0 :(得分:1)
(我知道你被要求实现你的自己的微小的unix shell;这是一个非常好但常见的练习)
大多数情况下,您无法使用bash
builtin commands(例如cd
,ulimit
等...贝壳。您不应该使用bash
或/bin/sh
至system(3),而是直接使用fork(2),execve(2)等...并实施您自己的globbing (见glob(7))。
例如,您必须在shell中自己显式实现一些cd
命令(调用chdir(2)系统调用)。因为当前working directory是每个进程的特定属性(因此每个进程都有自己的工作目录)。另请参阅credentials(7),fork(2),execve(2)。
这就是无法通过cd foo
实施system("cd foo")
的原因,因为system(3)启动了一个单独的,新的/bin/sh
进程(以及cd foo
只会在chdir
新进程中sh
,而不在您的进程中。{/ p>
大多数Unix shell都是free software。随意学习他们的源代码。还可以考虑使用strace(1)来了解他们正在做什么system calls。
还阅读一些关于Linux编程的书(例如ALP或更新的东西)。另请参阅intro(2),syscalls(2)以及从中引用的man
页面。
答案 1 :(得分:-1)
如果我理解你的问题,你想编写一个能够在C中执行bash命令的shell。在这种情况下:
你可以使用Execve(man execve),它可以运行bash命令
您可以在环境中找到路径。 (main(int ac,char ** argv,char ** env))
运行命令时必须使用fork(),因为execve()会关闭你的prog。