【发布时间】: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 实现 - 只需搜索即可。您的基本方法是从用户读取/存储所需的命令,然后将该命令传递给
popen或fork,并在循环中调用execv之类的命令。搜索,您会找到它们。 -
具有终端处理功能的 shell 是您在 UNIX 系统编程中可以做的更复杂的事情之一。我建议您等到非常熟悉系统的工作原理后再尝试实施。
-
顺便说一下,你观察到的并不是你程序的效果。您的程序在执行
reset后终止,它是您从中调用程序的 shell,它执行您所说的操作。