#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 |