Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的Shell_C_Shell_Operating System - Fatal编程技术网

C语言中的Shell

C语言中的Shell,c,shell,operating-system,C,Shell,Operating System,我想用C语言在Linux操作系统中编写一个shell 此项目中要使用的库和函数的名称是什么 谢谢。我不明白你的问题。你正在开始一个新事物,你可以用任何你想要的名字。项目的概念通常特定于某些IDE 要编写shell代码,您首先必须熟悉C编程语言,并充分理解几个重要的Linux系统调用(如fork,execve,pipe,chdir,dup等)。所以,先读一本关于这些的好教科书。系统调用可以通过标准的C库进行,您不需要链接额外的库 也许,学习小型shell(如)的源代码会对您有很大帮助。我不理解您的

我想用C语言在Linux操作系统中编写一个shell

此项目中要使用的库和函数的名称是什么


谢谢。我不明白你的问题。你正在开始一个新事物,你可以用任何你想要的名字。项目的概念通常特定于某些IDE

要编写shell代码,您首先必须熟悉C编程语言,并充分理解几个重要的Linux系统调用(如
fork
execve
pipe
chdir
dup
等)。所以,先读一本关于这些的好教科书。系统调用可以通过标准的C库进行,您不需要链接额外的库


也许,学习小型shell(如)的源代码会对您有很大帮助。

我不理解您的问题。你正在开始一个新事物,你可以用任何你想要的名字。项目的概念通常特定于某些IDE

要编写shell代码,您首先必须熟悉C编程语言,并充分理解几个重要的Linux系统调用(如
fork
execve
pipe
chdir
dup
等)。所以,先读一本关于这些的好教科书。系统调用可以通过标准的C库进行,您不需要链接额外的库


很可能,研究小型shell(比如)的源代码会对你有很大帮助。

不幸的是,你没有什么神奇的
emulateShell()
API调用可以实现这一点,你需要深入研究
exec
fork
popen
信号/sigaction
和一系列其他过程控制内容

此外,您可能需要参与终端处理等工作,例如
fcntl
ioctl

这不是一个可以全面涵盖的主题,而是一个如此大小的答案框。我建议把它分解成更小的工作,这样你(和我们)的工作就更容易了


也许从一个简单的程序开始,它接受来自用户的命令,并将它们分解成令牌来执行。这将是一个很好的第一步。

不幸的是,没有什么神奇的
emulateShell()
API调用可以实现这一点,您需要深入研究
exec
fork
popen
信号/sigaction
以及许多其他过程控制的事情

此外,您可能需要参与终端处理等工作,例如
fcntl
ioctl

这不是一个可以全面涵盖的主题,而是一个如此大小的答案框。我建议把它分解成更小的工作,这样你(和我们)的工作就更容易了


也许从一个简单的程序开始,它接受来自用户的命令,并将它们分解成令牌来执行。这将是很好的第一步。

事实上,这是一个有趣的问题,对于了解Unix的IO机制的人来说,这可能是一个很好的练习。您可能知道,Shell负责解释输入、调用系统调用和显示输出。这样的程序运行在内核之上。因此,本练习可能会提供许多有关流程执行系列的信息,例如
exec*


下面是C语言的概述,这将帮助您设计一个快速的原型以便于理解。

实际上,这是一个有趣的问题,了解Unix的IO机制可能是一个很好的练习。您可能知道,Shell负责解释输入、调用系统调用和显示输出。这样的程序运行在内核之上。因此,本练习可能会提供许多有关流程执行系列的信息,例如
exec*


下面是C语言的概述,这将帮助您设计一个快速的原型以便于理解。

您可能至少需要:

  • ,-用于调用子进程
  • -用于获取由fork+exec生成的死子进程
  • -用于将信号处理器安装到:
    • 捕获中断(CTRL+C)
    • 收获死子进程
  • -用于在重定向到/从文件中打开文件
  • -用于在实施重定向时用打开的文件替换STDIN/STDOUT
  • -用于创建管道

对于所需的任何附加功能,都是一个很好的资源。

您可能至少需要:

  • ,-用于调用子进程
  • -用于获取由fork+exec生成的死子进程
  • -用于将信号处理器安装到:
    • 捕获中断(CTRL+C)
    • 收获死子进程
  • -用于在重定向到/从文件中打开文件
  • -用于在实施重定向时用打开的文件替换STDIN/STDOUT
  • -用于创建管道

对于所需的任何附加功能,都是一个很好的资源。

您希望库做什么?请澄清,您想编写整个shell程序?您想从程序调用shell命令?您想将数据管道传输到shell?您需要一个行编辑器(readline/libedit)、一些链接和双链接列表帮助程序,一个解析器(我强烈推荐lemon)和极大的耐心。不幸的是,这个问题太宽泛了。如果你遇到了一个特定的问题,请随时提问。写一个贝壳是提高你技能的一个极好的练习。我为HelenOS编写了shell,这是我编程时最有趣的一次。我想从程序中调用shell命令。您希望库做什么?请澄清,您想编写整个shell程序吗?您想从程序中调用shell命令吗