📄 file.c
字号:
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 + -