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

Jua*_*ego 2 c unix shell process

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

$ rat
Welcome everything from now on will be recorded
recording $ ls
file1 file2 file3
recording $ quit
Bye bye
Run Code Online (Sandbox Code Playgroud)

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

<?xml version='1.0' encoding='UTF-8' ?>
<rat>
 <command>
   <input>ls</input>
   <output>file1 file2 file3</output>
   <err><err>
 </command>
</rat>
Run Code Online (Sandbox Code Playgroud)

我正在fp_in = popen( input, "w"); 和一些测试system,但首先与popen我不能更改目录和"系统我不能正确管理输入和输出.

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

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

使用xml文件,后来我正在考虑制作一个程序来存储这些数据和/或编辑这些数据,这样我就可以创建tutials和howto.

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

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

Bri*_*ell 6

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

如果您想自己编写,而不是使用system,我建议您使用fork/ exec创建一个shell进程,将所有输入和输出复制到其中.为了了解其工作原理,我建议您查看现有版本script的源代码.