読者です 読者をやめる 読者になる 読者になる

適当なファイルをローテションさせる

仕事のテストでログが2G超するのでサックリ作って埋め込みました。
以下、ソース

ソース

#include <stdio.h>
#include <string.h>

void LogRotate(char *filename);
long GetFileSize(char *filename);

int main()
{
    char *filenames[2] = { "file1.txt", "file2.txt" };
    int i = 0, j = 0;
    long fileSize = 0L;
    for (i = 0; i < 2; i++)
    {
        fileSize = GetFileSize(filenames[i]);
        printf("%s : %ld\n", filenames[i], fileSize);
        if (fileSize >= 40000000) {
            LogRotate(filenames[i]);
        }
    }
    return 0;
}

void LogRotate(char *filename)
{
    int i = 0, index = 0;
    char searchFileName[512];
    char oldFileName[512];
    char newFileName[512];
    memset(searchFileName, '\0', 512);
    memset(oldFileName, '\0', 512);
    memset(newFileName, '\0', 512);

    do {
        ++index;
        sprintf(searchFileName, "%s.%d", filename, index);
    } while (access(searchFileName, 0) == 0);

    for (i = index; i > 0; --i)
    {
        if (i == 1)
        {
            sprintf(oldFileName, "%s", filename);
        }
        else
        {
            sprintf(oldFileName, "%s.%d", filename, i - 1);
        }
        sprintf(newFileName, "%s.%d", filename, i);
        rename(oldFileName, newFileName);
    }
}

long GetFileSize(char *filename) {
    FILE *fp = fopen(filename, "rb");
    fpos_t fpos;
    long fileSize = 0L;
    if (fp != NULL)
    {
        fseek(fp, 0, SEEK_END);
        fgetpos(fp, &fpos);
        fclose(fp);
        fileSize = fpos.__pos;
    }
    return fileSize;
}