使用C在linux上录制命令行输入和输出

时间:2010-09-17 15:58:02

标签: c unix shell process

基本上我想做一个几乎像键盘记录程序的程序。问题是我作为网络管理员有时候我不记得在某些情况下我对机器做了什么,或者同时我为linux制作了howto和教程。我想记录我做了什么。 所以基本上这个程序的想法是: 你输入程序的名称,(我现在称之为鼠标)

$ rat
Welcome everything from now on will be recorded
recording $ ls
file1 file2 file3
recording $ quit
Bye bye

您所做的一切都将转到xml文件。像这样的东西

<?xml version='1.0' encoding='UTF-8' ?>
<rat>
 <command>
   <input>ls</input>
   <output>file1 file2 file3</output>
   <err><err>
 </command>
</rat>

我正在使用fp_in = popen( input, "w");进行一些测试 和system,但首先与popen我无法更改目录和“系统我无法正确管理输入和输出。

我还在检查是否有什么东西可以像插件一样猛击但没有找到任何信息。

在某些方面,如果感觉像我应该创建另一个shell(这超出了我目前的能力)或fork bash sh。但它应该是那么复杂的权利。 我很乐意建议从哪里开始。 我和C生锈了,所以我又读了很多基本的东西。

使用xml文件,后来我想创建一个程序来存储这些数据和/或编辑这些数据,这样我就可以创建tutials和howto。

我可以想到很多方法可以扩展到使用版画屏幕所以所有存储的图像都会转到一个文件,你可以上传到服务器(目前我很乐意存储数据)。它可能是一个有用的工具。

PS。我知道这也可以用于邪恶的事情。

3 个答案:

答案 0 :(得分:6)

已存在script命令,它将所有输入和输出记录到终端中,并将其写入记录。我建议只使用它,除非你有特殊的需求,它不符合。实际上,我见过的script最好的版本是NetBSD version,所以如果Linux版本不能满足您的需求,您可能需要调查一下。

如果您想自己编写,而不是使用system,我建议您使用fork / exec创建一个shell进程,您可以复制所有输入并输出到。为了了解其工作原理,我建议您查看an existing version of script的源代码。

答案 1 :(得分:1)

大多数shell都内置script,它只是在命令行中输入和输出文本。不是你想要的...... 令我惊讶的是script不是内置的,这意味着它一个用于构建你想要的模型。

script命令几乎可以执行您想要的操作:它只是在命令行中输入和输出文本。

如果您使提示与众不同(以便您可以可靠地区分shell命令和其他所有内容),您可以对script的输出进行后处理以实现您的目标。或者,您可以破解script以使其发出您正在寻找的XML。

答案 2 :(得分:0)

您也可以尝试从不同的角度来解决这个问题。而不是使用常规shell,使用ssh或telnet连接到计算机并以这种方式运行命令。许多ssh / telnet客户端(例如PuTTY)都可以选择在会话期间记录所有控制台输入和输出。您应该能够对此日志进行后处理,以生成所需的任何类型的日志文件。

根据您的设置,您甚至可能不需要使用第二台机器(您应该能够自己动手)。