📄 dir.c
字号:
p->count=p->count+1; struct node *q; q=(struct node *)malloc(sizeof(struct node)); q->count=0; memset(q->link,'0',sizeof(q->link)); memset(q->path,'\0',sizeof(q->path)); memset(path,'\0',sizeof(path)); strcpy(path,p->path); //存到数组中 strcat(path,"/"); strcat(path,dirp->d_name); strcpy(q->path,path); // strcpy(q->buf,p->buf); p->link[p->count]=q; //p->link[] buildtree(q); } } }void compare(struct node *refroot,struct node*refbackup){ int i,j; struct stat buffer; struct dirent *dirp; struct node *p=refroot; struct node *q=refbackup; for(i=1;i<=q->count;i++) { int flag=0; // printf("backup:%s\n",q->link[i]->path); for(j=1;j<=p->count;j++) { // printf("root:%s\n",p->link[j]->path); if(strcmp(p->link[j]->path ,q->link[i]->path)==0&&q->link[i]->buf.st_mode==p->link[j]->buf.st_mode) { flag=1; break; } } // 判断文件存在 if(flag==1) { if(S_ISREG(q->link[i]->buf.st_mode)) { // printf("%s\n",q->link[i]->path); if(p->link[j]->buf.st_mtime != q->link[i]->buf.st_mtime ) //文件修改时间不同 { memset(buff,'\0',sizeof(buff)); tm_ptr=localtime(&q->link[i]->buf.st_mtime); strftime(buff,sizeof(buff),"%b %e %T/%Y",tm_ptr); printf("Modify Files: %s Modify Time:%s\n",q->link[i]->path,buff); memset(logfile,'\0',sizeof(logfile)); strcpy(logfile,"Modify Files: "); strcat(logfile,q->link[i]->path); strcat(logfile," Modify Time: "); strcat(logfile,buff); strcat(logfile,"\n"); // fputs(logfile,fp2); //写入日志文件 buflen = strlen(logfile);
if((strcmp(type,"b")==0 )&&(q->link[i]->filetype==2))//用户只监视可执行文件文件
{ //写入socket中 fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if((strcmp(type,"a")==0 )&&(q->link[i]->filetype==1)) //用户只监视图形文件
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if(((strcmp(type,"c")==0 )&&(q->link[i]->filetype==1))||((strcmp(type,"c")==0 )&&(q->link[i]->filetype==2))) //监视二者
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if(strcmp(type,"d")==0 ) //监视全部
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } } } else if(S_ISDIR(q->link[i]->buf.st_mode)) { compare(p->link[j],q->link[i]); } } else { // printf("new file\n"); //添加文件 if(S_ISREG(q->link[i]->buf.st_mode)){ memset(buff,'\0',sizeof(buff)); tm_ptr=localtime(&q->link[i]->buf.st_mtime); strftime(buff,sizeof(buff),"%b %e %T/%Y",tm_ptr); printf("ADD File: %s ADD Time:%s\n",q->link[i]->path,buff); memset(logfile,'\0',sizeof(logfile)); strcpy(logfile,"ADD File: "); strcat(logfile,q->link[i]->path); strcat(logfile," ADD Time: "); strcat(logfile,buff); strcat(logfile,"\n"); buflen=strlen(logfile); if((strcmp(type,"b")==0 )&&(q->link[i]->filetype==2))
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if((strcmp(type,"a")==0 )&&(q->link[i]->filetype==1))
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if(((strcmp(type,"c")==0 )&&(q->link[i]->filetype==1))||((strcmp(type,"c")==0 )&&(q->link[i]->filetype==2)))
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if(strcmp(type,"d")==0 )
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } } else if(S_ISDIR(q->link[i]->buf.st_mode)){ //文件夹添加 memset(buff,'\0',sizeof(buff)); tm_ptr=localtime(&q->link[i]->buf.st_mtime); //时间由时间戳转化 strftime(buff,sizeof(buff),"%b %e %T/%Y",tm_ptr); printf("ADD File Folder: %s ADD Time:%s\n",q->link[i]->path,buff); memset(logfile,'\0',sizeof(logfile)); strcpy(logfile,"ADD File Folder: "); strcat(logfile,q->link[i]->path); strcat(logfile," ADD Time: "); strcat(logfile,buff); strcat(logfile,"\n"); fputs(logfile,fp2); buflen = strlen(logfile);
if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } } }}void cmp(struct node *refroot,struct node*refbackup) //删除文件{ int i,j; struct node *p=refroot; struct node *q=refbackup; for(i=1;i<=p->count;i++) { int flag=0; for(j=1;j<=q->count;j++) { if(strcmp(p->link[i]->path ,q->link[j]->path)==0&&q->link[j]->buf.st_mode==p->link[i]->buf.st_mode) { flag=1; break; } } if(flag==1) { if(S_ISDIR(p->link[i]->buf.st_mode)) { compare(p->link[i],q->link[j]); } } else { if(S_ISREG(p->link[i]->buf.st_mode)){ memset(buff,'\0',sizeof(buff)); time_t now; time(&now); tm_ptr=localtime(&now); strftime(buff,sizeof(buff),"%b %e %T/%Y",tm_ptr); printf("Delete File: %s Del Time:%s\n",p->link[i]->path,buff); memset(logfile,'\0',sizeof(logfile)); strcpy(logfile,"Delete File: "); strcat(logfile,p->link[i]->path); strcat(logfile," Del Time: "); strcat(logfile,buff); strcat(logfile,"\n"); // fputs(logfile,fp2); buflen = strlen(logfile);
if((strcmp(type,"b")==0 )&&(p->link[i]->filetype==2))
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if((strcmp(type,"a")==0 )&&(p->link[i]->filetype==1))
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if(((strcmp(type,"c")==0 )&&(p->link[i]->filetype==1))||((strcmp(type,"c")==0 )&&(p->link[i]->filetype==2)))
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } else if(strcmp(type,"d")==0 )
{ fputs(logfile,fp2); if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } } else if(S_ISDIR(p->link[i]->buf.st_mode)){ //文件夹删除 memset(buff,'\0',sizeof(buff)); time_t now; time(&now); tm_ptr=localtime(&now); strftime(buff,sizeof(buff),"%b %e %T/%Y",tm_ptr); printf("Delete File Folder: %s Del Time:%s\n",p->link[i]->path,buff); memset(logfile,'\0',sizeof(logfile)); strcpy(logfile,"Delete File Folder: "); strcat(logfile,p->link[i]->path); strcat(logfile," Delete Time: "); strcat(logfile,buff); strcat(logfile,"\n"); fputs(logfile,fp2); buflen = strlen(logfile);
if (write(sockfd, logfile, buflen) != buflen) {
perror("write error");
} } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -