gpt4 book ai didi

c - 如何在 C 语言自己的 shell 中使用 bash shell 内置命令?

转载 作者:行者123 更新时间:2023-11-30 19:31:34 25 4
gpt4 key购买 nike

我正在学习 IT 研究一年级,我有一个练习。我必须使用 C 为 Linux 编写自己的 shell。我有几点要做,其中之一是我的 shell 必须使用 man bash 中的 2-3 个 shell 内置命令。如何在我的代码中实现此功能?通过使用像 system() 或 execl() 这样的函数,或者在这种情况下它不正确并且还有其他选项吗?

最佳答案

(我理解您被要求实现您自己的小型 unix shell;这是一个非常好的但常见的练习)

大多数时候,您不能使用bash builtin commands (例如 cdulimit 等)在您自己的 shell 中。并且您不应该通过 system(3) 使用 bash/bin/sh但直接使用fork(2) , execve(2)等等...,并实现您自己的globbing (参见glob(7))。

举个例子,您必须在 shell 中自己显式实现一些 cd 命令(调用 chdir(2) 系统调用)。因为当前working directory是每个进程的特定属性(因此每个进程都有自己的工作目录)。另请参阅credentials(7) , fork(2) , execve(2) .

这就是为什么你不能通过执行system("cd foo")来实现你的cd foo,因为system(3)启动一个单独的、新的 /bin/sh 进程(并且 cd foo 只会在新的 sh 中使用 chdir > 流程,而不是您的流程)。

大多数 Unix shell 是 free software 。请随意研究他们的源代码。还可以考虑使用strace(1)了解什么system calls他们正在做。

还可以阅读一些有关 Linux 编程的书籍(例如 ALP 或更新的书籍)。另请参阅intro(2) , syscalls(2)以及从中引用的 man 页面。

关于c - 如何在 C 语言自己的 shell 中使用 bash shell 内置命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48442341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com