天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx

上传人:b****4 文档编号:8204103 上传时间:2023-05-10 格式:DOCX 页数:57 大小:26.73KB
下载 相关 举报
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第1页
第1页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第2页
第2页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第3页
第3页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第4页
第4页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第5页
第5页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第6页
第6页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第7页
第7页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第8页
第8页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第9页
第9页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第10页
第10页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第11页
第11页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第12页
第12页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第13页
第13页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第14页
第14页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第15页
第15页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第16页
第16页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第17页
第17页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第18页
第18页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第19页
第19页 / 共57页
天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx

《天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx》由会员分享,可在线阅读,更多相关《天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx(57页珍藏版)》请在冰点文库上搜索。

天津大学计算机科学与技术操作系统原理实验2Word文档格式.docx

#endif

structwd_name

{

intwd;

char*name;

};

intwd_NUM=0;

structwd_name*wd_array;

//structstatbuf;

//fordetiminethetypeoffile.

constintfilenameLen=500;

constintfilelistLen=10000;

charfiles[10000][500];

charbuffer[BUF_SIZE];

charlogmsg[500];

FILE*fplog;

intfd,wd;

char*offset=NULL;

structinotify_event*event;

intlen,tmp_len;

charstrbuf[16];

inti=0;

intm_argc;

char**m_argv;

intsleeptime=1;

char*event_array[]=

"

Filewasaccessed"

Filewasmodified"

Fileattributeswerechanged"

writtablefileclosed"

Unwrittablefileclosed"

Filewasopened"

FilewasmovedfromX"

FilewasmovedtoY"

Subfilewascreated"

Subfilewasdeleted"

Selfwasdeleted"

Selfwasmoved"

"

Backingfswasunmounted"

Eventqueuedoverflowed"

Filewasignored"

intinit(intargc,char**argv);

intreadConfig(char*filename);

intresetConfig(char*filename);

intreadScan(char*filename,intcur);

intparseCmd(char*filename,intargc,char**argv);

intexecCmd(char**dirs,char**f_files,char**filetypes,intdsize,intfsize,inttsize,char*filename,intflag);

//norecursively

intexecCmdN(char**dirs,intdsize,char*filename,intcur);

//recursively

intexecCmdR(char**dirs,intdsize,char*filename,intcur);

//withfiletype

intexecCmdT(char**dirs,char**filetypes,intdsize,inttsize,char*filename,intcur);

//onlyfiles

intexecCmdF(char**f_files,intfsize,intcur);

char*getTime()

time_tnow;

structtm*timenow;

charstrtemp[500];

time(&

now);

timenow=(structtm*)localtime(&

return(char*)asctime(timenow);

//printf("

recenttimeis:

%s\n"

asctime(timenow));

}

//forselect

intisready(intfd)

intrc;

fd_setfds;

structtimevaltv;

FD_ZERO(&

fds);

FD_SET(fd,&

tv.tv_sec=tv.tv_usec=0;

rc=select(fd+1,&

fds,NULL,NULL,&

tv);

if(rc<

0)//error

exit(-1);

returnFD_ISSET(fd,&

fds)?

1:

0;

//fordaemon

#defineLOCKFILE"

/var/run/fileMonitor.pid"

#defineLOCKMODE(S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)

intdaemonize(constchar*cmd)

inti,fd0,fd1,fd2;

pid_tpid;

structrlimitr1;

structsigactionsa;

umask(0);

//Clearfilecreationmask

if(getrlimit(RLIMIT_NOFILE,&

r1)<

0)

{

printf("

getrlimiterror.\n"

);

exit

(1);

}

if((pid=fork())<

0)

fork1error.\n"

exit

(2);

elseif(pid>

0)//Parent

exit(0);

setsid();

sa.sa_handler=SIG_IGN;

sigemptyset(&

sa.sa_mask);

sa.sa_flags=0;

if(sigaction(SIGHUP,&

sa,NULL)<

0)

sigactionerror.\n"

exit(3);

}

if((pid=fork())<

0)

{

fork2error.\n"

if(chdir("

/"

)<

printf("

chdirerror.\n"

exit(4);

//close(0);

/*closestdin*///forfile.scanandfile.conf

//close

(1);

/*closestdout*///forfile.scanandfile.conf

//close

(2);

/*closestderr*/

openlog(cmd,LOG_PID,LOG_USER);

syslog(LOG_INFO,"

fileMonitorStart\n"

intlockfile(intfd)

{

structflockf1;

f1.l_type=F_WRLCK;

f1.l_start=0;

f1.l_whence=SEEK_SET;

f1.l_len=0;

return(fcntl(fd,F_SETLK,&

f1));

}

intalready_running(void)

intfd;

charbuf[16];

fd=open(LOCKFILE,O_RDWR|O_CREAT,LOCKMODE);

if(fd<

Can'

tOpen%s:

%s\n"

LOCKFILE,strerror(errno));

%s"

if(lockfile(fd)<

if(errno==EACCES||errno==EAGAIN)

close(fd);

return1;

tlock%s:

ftruncate(fd,0);

sprintf(buf,"

%ld"

(long)getpid());

write(fd,buf,strlen(buf));

return0;

voidsigterm(intsigno)

gotSIGTERM,EXIT"

fclose(fplog);

closelog();

voidreread(void)

Re-readconfigurationfileok"

init(m_argc,m_argv);

voidsighup(intsigno)

Re-Readingconfigurationfile"

reread();

intmain(intargc,char**argv)

daemonize(argv[0]);

if(already_running())

fileMonitoralreadyrunning\n"

sa.sa_handler=sigterm;

sigaddset(&

sa.sa_mask,SIGTERM);

if(sigaction(SIGTERM,&

sa,NULL)<

tCatchSIGTERM:

strerror(errno));

sa.sa_handler=sighup;

sa.sa_mask,SIGHUP);

tcatchSIGHUP:

m_argc=argc;

m_argv=argv;

fd=inotify_init();

if(fd<

0){

memset(logmsg,0,500);

sprintf(logmsg,"

Failtoinitializeinotify.\n"

syslog(LOG_INFO,logmsg);

#else

#endif

exit(-1);

fplog=fopen(fileLog,"

wb"

memset(logmsg,0,500);

while

(1)

if(isready(fd))

{

if(len=read(fd,buffer,BUF_SIZE)){

offset=buffer;

memset(logmsg,0,500);

sprintf(logmsg,"

%s\tSomeeventhappens,len=%d.\n"

getTime(),len);

syslog(LOG_INFO,logmsg);

memset(logmsg,0,500);

sprintf(logmsg,"

fwrite(logmsg,1,sizeof(logmsg),fplog);

#ifdef_DEBUG

printf("

event=(structinotify_event*)buffer;

while(((char*)event-buffer)<

len)

{

if(event->

mask&

IN_ISDIR)

{

strcpy(strbuf,"

Direcotory"

}

else

File"

#ifdef_DEBUG

\tObjecttype:

%s\n"

strbuf);

#else

fwrite(logmsg,1,sizeof(logmsg),fplog);

printf("

#endif

for(i=0;

i<

wd_NUM;

i++)

if(event->

wd!

=wd_array[i].wd)continue;

\tObjectname:

wd_array[i].name);

memset(logmsg,0,500);

sprintf(logmsg,"

fwrite(logmsg,1,sizeof(logmsg),fplog);

printf("

break;

\tEventmask:

%08X\n"

event->

mask);

#else

EVENT_NUM;

if(event_array[i][0]=='

\0'

)continue;

(1<

<

i))

{

\tEvent:

event_array[i]);

memset(logmsg,0,500);

sprintf(logmsg,"

fwrite(logmsg,1,sizeof(logmsg),fplog);

printf("

}

tmp_len=sizeof(structinotify_event)+event->

len;

event=(structinotify_event*)(offset+tmp_len);

offset+=tmp_len;

}

fflush(fplog);

}

}

\tEsleeptime%d\r"

sleeptime);

#else

sleeptime%d\r"

sleeptime);

fflush(stdout);

init(m_argc,m_argv);

read(fd,buffer,BUF_SIZE);

sleep(sleeptime);

//readtheconfigurefromfile.conf

intreadConfig(char*filename)

FILE*fp;

fp=fopen(filename,"

r"

if(fp==NULL)

%screated.\n"

filename);

No%sexists.\n"

resetConfig(filename);

fp=fopen(filename,"

if(fp==NULL)

{

%scannotread.\n"

exit(-1);

}

intcur_file=0;

intcur_dir=0;

intcur_type=0;

char*f_dirs[500];

//forrecordthefiles

//sothemaxdirscmdlistlenis500

char*fileTypes[500];

//forrecordthefiletype

//sothemaxfileTypecmdlistlenis500

char*f_files[500];

//sothemaxfileTypecmdli

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2