![](/img/trans.png)
[英]c program (linux): get command line output to a variable and filter data
[英]Recording command line input and output on linux with C
基本上我想做一個像鍵盤記錄器一樣的程序。 問題是,作為網絡管理員,有時我不記得在某些情況下對計算機所做的操作,或者同一時間我編寫了Linux的howto和教程。 我想記錄一下我做了什么。 因此,該程序的基本思想是:鍵入程序的名稱(此刻我稱其為rat)
$ 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");
做一些測試fp_in = popen( input, "w");
和system
,但首先使用popen不能更改目錄,而使用“ system則無法正確管理輸入和輸出。
我還在檢查是否可以做一些像插件一樣的bash操作,但沒有找到任何信息。
在某些時候,如果感覺不錯,我應該創建另一個shell(這超出了我的當前能力)或fork bash sh。 但這應該是那么復雜的權利。 我願意建議從哪里開始。 我對C感到生疏,因此我再次閱讀了許多基本知識。
有了xml文件,后來我正在考慮制作一個程序來存儲此數據和/或編輯此數據,以便我可以創建教程和方法。
我可以想到許多將其擴展到使用printscreen的方法,因此所有存儲的圖像都將保存到一個文件,您可以將該文件上傳到服務器(此刻我很高興存儲數據)。 它可能是一個有用的工具。
PS。 我確實知道這也可以用於邪惡的事情。
script
命令已經存在,它將所有輸入和輸出記錄到終端中,並將其寫入筆錄中。 我建議僅使用它,除非您有不能滿足的特殊需求。 實際上,我見過的最好的script
版本是NetBSD版本 ,因此如果Linux版本不能滿足您的需求,您可能要研究一下。
如果您想自己編寫它,而不是使用system
,我建議您使用fork
/ exec
創建一個單獨的shell進程,將所有輸入和輸出都復制到其中。 為了了解其工作原理,建議查看現有script
版本的源代碼。
大多數外殼程序都有內置的 script
,該script
將僅在命令行內外記錄文本。不完全是您要尋找的東西...令我驚訝的是, script
不是內置的,這意味着它是構建所需內容的模型。
script
命令幾乎可以完成您想做的事情:它只記錄命令行中輸入和輸出的文本。
如果使您的提示與眾不同(以便您可以可靠地分辨出shell命令與其他所有命令之間的區別),則可以對script
輸出進行后處理以實現目標。 或者,您可以修改script
以使其發出要查找的XML。
您也可以嘗試從另一個角度解決這個問題。 不用常規的shell,而是使用ssh或telnet連接到計算機並以這種方式運行命令。 許多ssh / telnet客戶端(例如PuTTY )可以選擇在會話期間記錄所有控制台輸入和輸出。 您應該能夠對該日志進行后處理,以生成所需的任何類型的日志文件。
根據您的設置,您甚至可能不必使用第二台計算機(您應該可以自己使用ssh)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.