程序日志轮替时,如何删除最先创建的日志文件,给出可运行的C语言代码
时间: 2024-02-19 21:57:40 浏览: 137
C++删除指定文件夹下N天及之前日志文件的方法
可以使用时间戳来判断哪个日志文件是最先创建的,从而进行删除。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <string.h>
#define LOG_FILE_PREFIX "./log_"
#define LOG_FILE_SUFFIX ".txt"
#define MAX_LOG_FILES 10
int main() {
// 获取当前时间戳
time_t now = time(NULL);
// 构造日志文件名
char log_file_name[100];
sprintf(log_file_name, "%s%ld%s", LOG_FILE_PREFIX, now, LOG_FILE_SUFFIX);
// 创建新的日志文件
FILE *log_file = fopen(log_file_name, "w");
if (log_file == NULL) {
printf("Failed to create log file!\n");
exit(1);
}
// 关闭日志文件
fclose(log_file);
// 获取日志文件列表
struct stat st;
char cmd[100];
sprintf(cmd, "ls %s*%s | sort -n", LOG_FILE_PREFIX, LOG_FILE_SUFFIX);
FILE *fp = popen(cmd, "r");
if (fp == NULL) {
printf("Failed to execute command!\n");
exit(1);
}
// 读取日志文件列表
char log_files[MAX_LOG_FILES][100];
int i = 0;
while (fgets(log_files[i], 100, fp) != NULL) {
// 去掉换行符
log_files[i][strlen(log_files[i]) - 1] = '\0';
// 记录文件信息
stat(log_files[i], &st);
time_t file_time = st.st_mtime;
// 如果文件是最先创建的,就删除它
if (i >= MAX_LOG_FILES - 1) {
remove(log_files[0]);
for (int j = 0; j < i - 1; j++) {
strcpy(log_files[j], log_files[j + 1]);
}
i--;
}
// 插入新的文件
if (now < file_time) {
for (int j = i - 1; j >= 0; j--) {
strcpy(log_files[j + 1], log_files[j]);
}
strcpy(log_files[0], log_file_name);
i++;
break;
}
i++;
}
// 输出日志文件列表
printf("Log files:\n");
for (int j = 0; j < i; j++) {
printf("%s\n", log_files[j]);
}
// 关闭文件指针
pclose(fp);
return 0;
}
```
这个程序会在当前目录下创建一个新的日志文件,然后列出所有以 `./log_` 开头、以 `.txt` 结尾的文件,并根据它们的创建时间戳来判断哪些文件是最先创建的。如果文件列表中的文件数超过了 `MAX_LOG_FILES`,就删除最先创建的文件。最后输出日志文件列表。
阅读全文