2009년 9월 9일 수요일

로그파일감시3

3.FIFO 특수파일을 이용한 자작툴 제작

예를들어 General로그 파일의 옵션 --log=에 FIFO특수파일을 지정할 수 있다.
Unix계열에서는 문제없이 동작한다.

지정된 FIFO특수 파일을 읽어들이는 툴을 만들면 될 것이다.
자작툴이 FIFO를 읽어들이기 전용으로 오픈하는 것으로 해놓고 MySQL서버를 기동한다.

다음 코드는 FIFO파일을 읽어 그것을 표준출력에 보내는 단순한 C샘플코드이다.
인수처리, FIFO파일을 작성하는 처리, 에러처리, 시그날을 받았을 경우의 처리등 자세한 처리는 하지 않고 있으므로 본격적으로 사용하려면 수정을 해야할 것이다.

FIFO파일은 Linux에서는 mkfifo명령어로 간단히 작성가능하다.

FIFO특수파일 작성
shell$ mkfifo --mode=660 /tmp/mylog

/****샘플코드 ****/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#define LOGFIFO "/tmp/mylog"

int main(int argc, char **argv)
{
int fd;
char buf[256];
ssize_t st_rd;

fd=open(LOGFIFO, O_RDONLY|O_NONBLOCK);
if ( fd == -1 ){
printf("can't open FIFO file.¥n");
exit(1);
}
while(1) {
st_rd = read(fd, buf, sizeof(buf)-1);
if ( st_rd > 0 ) {
buf[st_rd] = '¥0';
fputs(buf, stdout);
}
else if ( st_rd == 0 ) {
}
}//while end
close(fd);
exit(0);
}