주기적으로 로그 파일을 지우고 싶은데..
안녕하세요?
주기적으로 로그 디렉토리에 파일이 15개를 초과하면 오래된 파일 순으로 파일을 삭제 하고 싶은데요.
유닉스라 그런지 readdir 로 파일을 읽으면 날짜 순으로 읽어지지 않더라구요.
scandir () , alphasort 함수 써 볼려고 했더니 선언 되어 있지 않다고 나오네요.(diren.h 파일에 선언되어 있지 않음)
// del_logfile 함수는 logno 값(로그 파일 총 갯수)이 15를 초과하면, call 되는 함수.
// 지금 구현한 건 해당 로그 디렉토리에서 파일을 읽어서(readdir 함수가 순서에 관계없이 읽어들여짐)
// 초과한 파일 수에 대하여 오래된 파일 순으로 삭제 하고 싶은데...
// fstat 함수 나 lstat 함수를 써야 하나요? 좀 자세히 답변 바랍니다.
int
del_logfile (int logno)
{
DIR* dp;
struct dirent *dirp;
int del_no = 0;
char file_src[MAX_NAME];
struct stat stat_p;
del_no = logno - 15;
if ((dp = opendir(ADT_LOG_DIR)) == NULL)
{
printf("ADT_LOG_DIR path(%s) cannot opened directory", ADT_LOG_DIR);
return ERROR;
}
while ((dirp = readdir(dp)) != NULL)
{
if ((strcmp(dirp->d_name, ".") == 0) || (strcmp(dirp->d_name, "..") == 0))
continue;
sprintf(file_src, "%s%s", ADT_LOG_DIR, dirp->d_name);
if (rm_file (file_src))
{
printf("cannot Deleted audit file");
return ERROR;
}
del_no--;
if (del_no == 0)
break;
}
closedir (dp);
return SUCCESS;
}
.
logrotate 가능하면 그거 쓰세요.
댓글 달기