TSK的 log 檔案是一個 2進制檔,每筆紀錄用 0x00 當作結束,
總長度0x63FFF byte (409600 byte) 如下圖:
接下來就是如何用 C語言來讀取這個檔案,程式內容說明如下:
首先是開啟檔案(fopen()),從標準輸入(ARGV)讀入檔名,
每次讀入1個字元(fgetc())直到檔案結束(EOF),
fp = fopen (argv[file_cont], "r");
while((ch = fgetc(fp)) != EOF) {
printf("%c", ch = (ch == '\0') ? '\n' : ch);
}
其中,ch = (ch == '\0') ? '\n' : ch
這是三元運算子,等效是:
if (ch == '\0')
ch = '\n';
意思是,如果讀入的字元是 '\0' 就更換成 '\n' (換行符),然後印出
寫成精簡一點就是:
printf("%c", ch = (ch == '\0') ? '\n' : ch);
因為這 log 檔通常是 3個,所以外層加上一個迴圈可以讓使用者輸入多個檔案
for (file_cont = 1; file_cont < argc; file_cont++) {
. . .
. . .
}
這樣我就可以同時輸入多個檔案依序讀取並印出:
$./log_prog LOG_1.DAT LOG_2_DAT LOG_3.DAT
或是用shell的集合功能可以少打一些字:
$./log_prog LOG_{1,2,3}.DAT
完整程式碼如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
int file_cont;
char ch;
if (argc == 1)
return 0;
for (file_cont = 1; file_cont < argc; file_cont++) {
printf("\n->>>>> File:%s <<<<<-\n", argv[file_cont]);
fp = fopen (argv[file_cont], "r");
while((ch = fgetc(fp)) != EOF)
printf("%c", ch = (ch == '\0') ? '\n' : ch);
printf("\n");
}
return 0;
}
輸出結果:
由於檔案很長所以可以利用導向符 ">" 輸出至檔案
$./log_prog LOG_1.DAT > log1.txt
這樣就可以用文字編輯器來開啟log1.txt
你可以參考:
1. 使用 Julia讀取TSK log檔案
沒有留言:
張貼留言