C++实现定时改名,但是名字改了,服务器还是对那个文件进行操作,迷惑了
我的apache服务器上有一个日志文件access.log,为了避免它过大,我写了一个自动改文件名的控制台程序,每到0点的时候就将它命名为"日期 access.log",我本以为服务器会重新创建一个access.log文件进行操作,可没想到服务器竟然继续对"日期 access.log"进行操作.
我不知道服务器怎么写的,其实这个功能完全可以服务器来实现吧?可是头就让我做个小程序自动改...郁闷了..看看代码如下,用的rename()改的文件名,是不是rename()的问题?
我现在想换个思路,就是0点的时候把access.log的内容都copy到"日期 access.log"文件中,但是怕占用权限出问题.还有就是,如果没有占用权限问题,那么服务器往里面写数据,我往外面拿,容易出现死循环吧..
大伙有没有好想法,跪求啊~
C++ Rename. 文件操作 服务器
while(1)
{
time_t timeNow = time(0); //获取当前时间
tm tim = *localtime(&timeNow); //转换为tim格式
int iYear =tim.tm_year+1900; //年
int iMonth=tim.tm_mon+1; //月
int iDay = tim.tm_mday; //日
int iHour = tim.tm_hour; //小时 (timeNow%(3600*24)/3600+8)%24;
int iMinute = tim.tm_min; //分钟 (timeNow%3600)/60;
int iSecond = tim.tm_sec; //秒 timeNow%60;
char date[20];
_snprintf(date, sizeof(date), "%04d-%02d-%02d", iYear, iMonth, iDay); //将日期转换成字符串
_snprintf(date+10, sizeof(date), "%c%c%c%c%c%c%c%c%c%c%c", ' ' ,'a','c','c','e','s','s','.','l','o','g'); //添加access.log文件名
if((iHour>1) & (iHour<22)) //若当前的小时在1-22之间,暂停1小时
{
Sleep(3600000);
}
else
{
if((iHour == 0) && (iMinute == 0) && (iSecond == 0))
{
rename("access.log", date); //修改文件名
cout<<date<<" 修改Log文件名"<<endl; //输出修改信息
}
Sleep(1000); //暂停1秒
}
}