#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 (2) | 2023.03.07 | 
|---|---|
| 리눅스 IP충돌 체크 (7) | 2022.09.08 | 
| 리눅스 정규식을 이용한 IP / Email 주소 체크 (0) | 2022.09.06 | 
| 구조체 배열 인자로 넘겨서 채우기 (0) | 2022.08.11 | 
| 리눅스 usb mount 예제 (0) | 2021.07.20 | 






