我用的是ubuntu8.0.4
这个程序是监视文件的,当它被修改后,自动备份。
代码:
int main(int argc,char *argv[])
{
int fd;
int stat,pid;
struct stat stbuf;
time_t old_time = 0;
if( (fd=open(argv[1],O_WRONLY))==-1 )
{
printf( "can 't ooen watchfile\n ");
return 2;
}
fstat(fd,&stbuf);
old_time = stbuf.st_mtime;
for(;;)
{ fstat(fd,&stbuf);
if(old_time != stbuf.st_mtime)
{
while(pid = vfork()== -1 );
if(pid == 0)
{
execl( "/bin/cp ", "/bin/cp ",argv[1],argv[2],0);
return 3;
}
wait(&stat);
old_time = stbuf.st_mtime;
}
else
sleep(20);
}
}
运行程序:
./ex14 watchfile watchfile.bak&
我用stat watchfile//查看文件修改时间
结果是:Modify: 2011-04-30 12:25:49.000000000 +0800。
vim watchfile.之后我修改它,使文件的修改时间发生变化。
//查看文件的修改时间
stat watchfile:
Modify: 2011-04-3012:27:40.000000000 +0800
但是我修改watchfile后,查看watchfile.bak后,没有备份watchfile (此时程序还在运行当中)。把程序停止,在查看watchfile.bak中的内容,依然没有发生变化。
原因:应该是 if(old_time != stbuf.st_mtime)。但是为什么,我修改了watchfile后,stbuf.st_mttime,的时间在程序中
返回的时间按没有发生变化呢?
在Cent OS5.6运行的时候,只能成功执行一次