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
,

#SETP_01. crontab에서 실행할 script파일 생성
#data_backup.sh ===========================================
#!/bin/sh

CURRENT_DATE=`date +%Y_%m%d`
tar zcf /home/afewgood/backup_${CURRENT_DATE}.tar.gz /home/afewgood/data

#find /home/afewgood/ -name "backup_*.tar.gz" -mtime +180    #생성된지 180일(6개월)이 지난 파일 찾기
find /home/afewgood/ -name "backup_*.tar.gz" -mtime +180 -exec rm -rf {} \;    #rm명령으로 파일 삭제
#end of file ==============================================

SETP_02 crontab 적용
#매달 말일 23:59에 스크립트 실행

#방법_01 /etc/crontab 파일을 직접 수정 (su권한)
[root@afewgood ~]$ vi /ect/crontab
59 23 * * * [ $(date +\%d -d tomorrow) = 01 ] && root /home/data_backup.sh

#방법_02 crontab -e 를 이용해서 crontab에 추가 (su권한 / 사용자 지정 없음)
[root@afewgood ~]$ crontab -e
59 23 * * * [ $(date +\%d -d tomorrow) = 01 ] && /home/data_backup.sh

※ crontab 작업목록확인
[root@afewgood~]$ crontab -l

※ arch linux crontab 설치 및 설정 순서
1. crontab 설치
[root@afewgood ~]$ sudo pacman -S cronie
2. 실행
[root@afewgood ~]$ sudo systemctl enable --now cronie.service
3. shell script 작성
4. crontab -e를 이용하여 crontab 명령 추가

√ 참고사이트 목록
https://velog.io/@khyup0629/shell-script-crontab-%EB%A7%A4%EB%8B%AC-%EB%A7%88%EC%A7%80%EB%A7%89-%EB%82%A0%EC%97%90-%EC%8B%A4%ED%96%89%EB%90%98%EB%8F%84%EB%A1%9D-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
https://blog.desdelinux.net/ko/usar-crontab-en-archlinux-con-cronie/
https://www.nemonein.xyz/2022/02/6424/
https://jdm.kr/blog/2

Posted by afewgood
,

리눅스 IP충돌 체크

c 2022. 9. 8. 09:21

int ip_conflict_check(char *device, char *ip)
{
    FILE *fp;
    char cmd[64], buf[128];

    memset(cmd, 0x00, sizeof(cmd));
    sprintf(cmd, "arping -q -D -I %s -c 1 %s; echo $?", device, ip);
    if((fp=popen(cmd, "r")) == NULL)
    {
        perror("popen() Fail");
        return -1;
    }

    memset(buf, 0x00, sizeof(buf));
    while(1)
    {
        if(fgets(buf, sizeof(buf), fp) == NULL) break;
    }
    pclose(fp);

    return buf[0]-0x30;
}

int main(void)
{
    char *device="eth0"; //"wlan0" //Network (Ethernet or WiFi) Interface Device
    char *ip="192.168.0.254"; //체크하고자 하는 IP

    ip_conflict_check(device, ip);
}

'c' 카테고리의 다른 글

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