上一篇文章做的那個(gè)稍微有點(diǎn)復(fù)雜了,還需要把板子的輸出拿回電腦處理再倒回去。這個(gè)就簡(jiǎn)單多了用法如下
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)專業(yè)提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!usage:
event record /path/file1
event replay /path/file1
給我女友寫的程序直接搬過來(lái)了,所以注釋有些冗余。
"stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct input_event {
timeval time;
__u16 type;
__u16 code;
__s32 value;
};
struct myinputevent:public input_event
//繼承了16字節(jié)的數(shù)據(jù)結(jié)構(gòu),添加了一個(gè)deviceID{
int deviceID;
};
main.cpp
#include "stdafx.h"void record(char* filename);
void replay(char* filename);
int main(int argc, char *argv[])
{
if(argc!=3 || (strcmp(argv[1],"record") & strcmp(argv[1],"replay")))
{
std::cout<<
"usage:"<
replay.cpp
#include "stdafx.h"http://#define DEBUGint timedif(timeval& a,timeval& b)
//這是個(gè)計(jì)算時(shí)間差的函數(shù),對(duì)于一個(gè)timeval的數(shù)據(jù)結(jié)構(gòu),前面4字節(jié)秒,后面4字節(jié)微秒
//這個(gè)函數(shù)接受兩個(gè)這樣的結(jié)構(gòu),返回一個(gè)微秒單位的時(shí)間差{
return (b.tv_sec-a.tv_sec)*1000000+(b.tv_usec-a.tv_usec);
}
void replay(char* filename)
{
int fi = open(filename,O_RDONLY);
if(fi==-1)
{
std::cout<
record.cpp
#include "stdafx.h"#define DEBUG
inlinebool eventcmp(const myinputevent& a,const myinputevent& b)
//這個(gè)比較函數(shù)為了之后排序用,因?yàn)閮蓚€(gè)自定義的數(shù)據(jù)結(jié)構(gòu),你用標(biāo)準(zhǔn)排序函數(shù),排序肯定不知道你這倆結(jié)構(gòu)應(yīng)該怎么比大小
//定義了我的數(shù)據(jù)結(jié)構(gòu)之間如果做小于比較時(shí),時(shí)間小就算小。
//這樣就可以采用標(biāo)準(zhǔn)排序函數(shù)對(duì)事件進(jìn)行排序了。{
if(a.time.tv_secb.time.tv_sec)
return 0;
if(a.time.tv_usec AllRecordedEvent;
//這里有個(gè)數(shù)組,用來(lái)添加所有錄制到的eventchar fn[200];
void afterstop(int x)
//按下ctrl+c和回車之后,錄制停止,做數(shù)據(jù)整理和保存工作
//主要是按時(shí)間順序?qū)κ录判颍缓蟊4鎨
#ifdef DEBUG
std::cout<<"Recorded events:"<code;
my.type=p->type;
my.value=p->value;
my.time=p->time;
my.deviceID=i;
AllRecordedEvent.push_back(my);
//這里可能難理解,buffer里存儲(chǔ)了大量16字節(jié)的event,所以讓指針p是數(shù)據(jù)結(jié)構(gòu)指針,然后16字節(jié)16字節(jié)的挪動(dòng)
//我有一個(gè)自己的數(shù)據(jù)結(jié)構(gòu)叫myinputevent,比這個(gè)16字節(jié)來(lái)說,尾部添加了一個(gè)4字節(jié)的int,存儲(chǔ)設(shè)備的event號(hào)
//你可以在stdafx.h中看到這些數(shù)據(jù)結(jié)構(gòu)
//把那16字節(jié)的原封不動(dòng)的放到我的數(shù)據(jù)結(jié)構(gòu)中,再把我自己的設(shè)備號(hào)賦值,就完成了這一個(gè)事件的錄制。
//然后就存儲(chǔ)到AllRecordedEvent里面去。 }
}
}
}
}