題目要求是實作下面6個功能,我現在能寫出的代碼能實作前兩個功能,和老師溝通過后,我代碼存在的問題應該是沒能把檔案中資訊存盤在結構體中,我在代碼中使用了strncpy_s函式,想把資訊復制到結構體items中,但是后面的功能實作不了,已經卡在這里好久了,還是沒有進步,能看看錯在哪了嗎?
(1)對日志檔案進行串列讀取和寫入;
(2)計算日志檔案中GET型別請求方式的占比;
(3)對訪問狀態碼進行分析與統計,計算所有訪問狀態碼的比率;
(4)分析訪問最多的客戶IP地址,并統計其訪問次數;
(5)分析常用密碼,并統計密碼使用次數;
(6)用戶輸入時間段,查找該時間段內訪問記錄并輸出到檔案中
#include<stdio.h>
#include<string.h>
struct record
{
char method[255];
char ip[255];
char protocol[255];
char time[255];
char add[255];
char port[255];
char page[255];
char status[255];
char exploer_info[255];
char key[255];
char value[255];
char prams_cnt[255];
};
struct record items[2048];//所有記錄
int items_cnt=0;//記錄數
int main(void)
{
FILE *fp;
fp=fopen("access.log","r+");
if(!fp){
printf("false\n");
}
else{
printf("true\n");
}
int n=0,m=0;
char line[2048];
int i=0,x,j,j_pos,j_pos1;
int lines=0;
int pos[9],pos1[9];
char s='[';
char s1=']';
struct record rec;//定義結構體變數
printf("日志分析:\n");
while(fgets(line,2048,fp)!=NULL)
{
puts(line);
n++;
if(strncmp(line,"[GET]",5)==0)
{
m++;
}//比較兩字串,相等時strncmp函式值回傳0,計數
}//輸出日志檔案內容并統計計數
printf("輸出GET請求所占比例:%f\n",1.0*m/n);//輸出所占百分比;
int fclose(FILE *fp);
fp=fopen("access.log","r+");
while((fgets(line,2048,fp))!=NULL)
{
x=strlen(line);
j_pos=0,j_pos1=0;
for(j=0;j<x;j++)
{
if(line[j]==s)//此處為'['開始的位置
{
pos[j_pos]=j;
j_pos++;
}
if(line[j]==s1)//']'結束的位置
{
pos1[j_pos1]=j;
j_pos1++;
}
//strncpy_s函式的使用strncpy_s(char *str2,int size2,char *str1,int size1);
strncpy_s(items[s].method,sizeof(items[s].method),line+pos[0]+1,pos1[0]-pos[0]-1);
strncpy_s(items[s].ip,sizeof(items[s].ip),line+pos[1]+1,pos1[1]-pos[1]-1);
strncpy_s(items[s].protocol,sizeof(items[s].protocol),line+pos[2]+1,pos1[2]-pos[2]-1);
strncpy_s(items[s].time,sizeof(items[s].time),line+pos[3]+1,pos1[3]-pos[3]-1);
strncpy_s(items[s].add,sizeof(items[s].add),line+pos[4]+1,pos1[4]-pos[4]-1);
strncpy_s(items[s].page,sizeof(items[s].page),line+pos[5]+1,pos1[5]-pos[5]-1);
strncpy_s(items[s].port,sizeof(items[s].port),line+pos[6]+1,pos1[6]-pos[6]-1);
strncpy_s(items[s].status,sizeof(items[s].status),line+pos[7]+1,pos1[7]-pos[7]-1);
strncpy_s(items[s].exploer_info,sizeof(items[s].exploer_info),line+pos[8]+1,pos1[8]-pos[8]-1);
//結構體成員賦值
}
}
int fclose(FILE *fp);
fp=fopen("access.log","r+");
strncpy_s(items[2048],2048, line[2048]);
int maxi=0,maxn=0;
char arr[255]={0};
char vis[255]={0};
for(i=0;i<line[i];i++)
{
arr[items[i].status[i]]++;
vis[items[i].status[i]]=1;
if(maxn<vis[i])
{
maxn=vis[i];
maxi=i;
}
}
printf("%lf\n",1.0*arr[i]++/i);
printf("%lf",maxi);
int fclose(FILE *fp);
return 0;
}
uj5u.com熱心網友回復:
課設就自己加油吧轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/264284.html
標籤:C語言
上一篇:c++程式
下一篇:eclipse 打不開
