'c 로그파일'에 해당되는 글 1건

  1. 2023.02.07 log파일 만들기 source

log파일 만들기 source

c 2023. 2. 7. 21:47

#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>

void write_log(char *data, int len)
{
    int fd, i, pos, index;
    unsigned int bGetIndex=0;
    char current, flag=0;
    char buf[24], contents[440];    //로그 data 및 로그파일 사이즈 440=LOGData(X.22)*20

    fd = open("afewgood.log", O_RDWR);
    if(fd < 0)    return;

    memset(contents, 0x00, sizeof(contents));
    read(fd, contents, sizeof(contents));

    //Get Index & Flag ------------------------------------------------------------
    current = contents[0];
    if(current<'A' || current>'Z')
    {
        flag = 'A';
        index = 0;
        bGetIndex = 1;
    }
    else
    {
        pos = 0;
        for(i=0; i<20; i++) //20=data 갯수
        {
            memset(buf, 0x00, sizeof(buf));
            memcpy(buf, &contents[pos], len+1); //+1=flag(X.1)
            pos += len+1;

            if(buf[0] != current)
            {
                flag = contents[pos-((len+1)*2)]; //+1=flag(X.1)
                index = i;
                bGetIndex = 1;
                break;
            }
            current = buf[0];
        }

        if(bGetIndex == 0)
        {
            current++;
            if(current<'A' || current>'Z')    current = 'A';
            flag = current;
            index = 0;
        }
    }

    //write ---------------------------------------------------------------------
    pos = 0;
    memset(buf, 0x00, sizeof(buf));
    buf[pos++] = flag;
    memcpy(&buf[pos], data, len);
    pos += len;

    printf("LOG Index=[%c][%d]\n", flag, index+1);

    lseek(fd, index*(len+1), SEEK_SET); //+1=flag(X.1)
    write(fd, buf, pos);

    close(fd);
    sync();
}


int main(void)
{
    int select=0;
    struct timeval tv;
    time_t nowtime;
    struct tm *nowtm;
    char data[24];

    while(1)
    {
        printf("+++++ Write LOG Sample +++++\n");
        printf(" 1=write LOG\n");
        printf(" 5=Exit\n");
        printf("++++++++++++++++++++++++++++\n");

        printf("Menu Select>> :   ");
        scanf("%d", &select);

        switch(select)
        {
            case 1:
                gettimeofday(&tv, NULL);
                nowtime = tv.tv_sec;
                nowtm = localtime(&nowtime);

                memset(data, 0x00, sizeof(data));
                strftime(data, sizeof(data), "%Y-%m-%d %H:%M:%S", nowtm);    //(X.19)YYYY-MM-DD hh:mm:ss
                printf("%s\n", data);
                memcpy(&data[strlen(data)], "\x0d\x0a", 2);    //X.21

                write_log(data, 21);
                break;

            default:    break;
        }
    }
}

'c' 카테고리의 다른 글

fopen() open() Example  (0) 2023.03.07
리눅스 IP충돌 체크  (0) 2022.09.08
리눅스 정규식을 이용한 IP / Email 주소 체크  (0) 2022.09.06
구조체 배열 인자로 넘겨서 채우기  (0) 2022.08.11
리눅스 usb mount 예제  (0) 2021.07.20
Posted by afewgood
,