tail -f를 구현하려고 합니다. 도와주세요~~
글쓴이: doogie / 작성시간: 목, 2007/04/19 - 5:59오후
tail -f 를 구현하려고 KLDP를 검색해보니까 ...
select 함수를 통해서 tail -f 식으로 실시간으로 들어온 파일의 내용을 캐치할 수 있다고 해서
지금 구현해봤습니다.
특별한 내용도 없고 간단한 소스인데도 select 함수에서 이벤트가 있다고 무조건 통과하네요...
그리고 read 함수에서는 읽은게 없다고 나옵니다...
원인을 잘 모르겠습니다. 가르쳐주세요 ^^
다음은 소스코드입니다...
if (argc <= 1) {
printf ("Usage: %s [tailable file]\n", argv [0]);
exit (EXIT_FAILURE);
}
string file_name = argv[1];
printf ("%s is started with [%s]\n", argv [0], file_name.c_str ());
int fd = open (file_name.c_str (), O_RDONLY);
if (fd < 0) {
printf ("file [%s] open error : [%s]\n", file_name.c_str (), strerror (errno));
exit (EXIT_FAILURE);
}
// select 관련 변수 선언
struct timeval tv;
fd_set read_fds;
char buf [1024];
tv.tv_sec = 1;
tv.tv_usec = 0;
FD_ZERO (&read_fds);
int res;
while (true) {
FD_SET (fd, &read_fds);
if ((res = select (fd + 1, &read_fds, NULL, NULL, &tv)) <= 0) {
printf ("select timeout found ...\n");
continue;
}
printf ("fd : %d, select result : %d\n", fd, res);
if (FD_ISSET (fd, &read_fds)) {
memset (buf, 0, 1024);
res = readline (fd, buf, 1024);
if (res == 0) {
printf ("EOF found in fd [%d][%s]\n", fd, file_name.c_str ());
} else if (res < 0) {
printf ("error found in fd [%d][%s]\n", fd, file_name.c_str ());
// output file에다 write 한다.
} else {
printf ("readline : %s\n", buf);
}
}
}
exit (EXIT_SUCCESS);Forums:


댓글 달기