【问题标题】:A shell-like application in C on Ubuntu [closed]Ubuntu上C语言中的类shell应用程序[关闭]
【发布时间】:2016-01-17 11:21:54
【问题描述】:

好的。所以我正在尝试编写一个类似于 shell 的应用程序以在 Ubuntu 终端中运行,但我不知道从哪里开始。我需要在文本编辑器中编写一个 C 程序,在现有终端(ioana@ioana-VirtualBox:~/Desktop$ gcc OS.c -o OS.c./OS)中运行该程序。

我的 C 程序应该重置终端并让我重新制作和/或以某种方式从原来的应该导入基本功能(我应该编写一个将关闭终端的退出函数,但它不应该与从终端的原始应;为不会与已实现的历史错误混淆的关键 UP-DOWN 历史记录做缓冲区)。我阅读了一些关于ncurses 库的信息并安装了它。

到目前为止我只有这个:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "ncurses.h"

int main()
{
     system("reset");
     return 0;
}

这是一个完美的运行代码,它会清除屏幕,但如果我按 UP 或 DOWN,则会显示以前的命令,如果我键入 exit,终端就会关闭。我不想要这些。 如果有人能解释我能做什么,我将不胜感激。我阅读了这些主题,但没有找到我可以清楚理解的内容。

【问题讨论】:

  • 这是最基本的程序,如果你不使用它,为什么要包含 ncurses.h
  • 尝试使用history -c。此命令清除命令历史记录。即~/.bash_history file 处的文件
  • StackOverflow 上已经有许多 C 语言中的基本 shell 实现 - 只需搜索即可。您的基本方法是从用户读取/存储所需的命令,然后将该命令传递给popenfork,并在循环中调用execv 之类的命令。搜索,您会找到它们。
  • 具有终端处理功能的 shell 是您在 UNIX 系统编程中可以做的更复杂的事情之一。我建议您等到非常熟悉系统的工作原理后再尝试实施。
  • 顺便说一下,你观察到的并不是你程序的效果。您的程序在执行reset 后终止,它是您从中调用程序的 shell,它执行您所说的操作。

标签: c ubuntu


【解决方案1】:

几个问题和提示:

附言。如果您不熟悉这一切,那么制作一个功能齐全的 shell 需要几个月的时间。

【讨论】:

  • 非常好的答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 2015-12-24
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多