select¸¦ ÀÌ¿ëÇÑ Multi tail ±¸Çö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : Code>C>tail



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¼³¸í

tail±¸Çö ÇÔ¼ö ÀÔ´Ï´Ù. ÆÄÀÏ¿¡ Ãß°¡ µÇ´Â ³»¿ëÀÌ ÀÖ´ÂÁö °Ë»çÇØ¼­ ÁÙ´ÜÀ§·Î ÀоîµéÀÔ´Ï´Ù. ·Î±×ÆÄÀÏ󸮸¦ À§ÇÑ ÇÁ·Î±×·¥µî¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù. ÇöÀç Àú´Â ApacheÀÇ À¥·Î±×¸¦ ºÐ¼®Çؼ­ PV, Hits¸¦ Åë°è³»´Â °÷¿¡ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ½Ã°£´ÜÀ§·Î ´©Àû count °ªÀ» RRD¿¡ ÀúÀåÇØ µÐ´Ù¸é, º¯È­·®À» ÃøÁ¤ÇÒ ¼ö ÀְԵ˴ϴÙ.

  1. ÆÄÀÏÀÇ ³¡¿¡ µµ´ÞÇϸé selectÀÇ Àǹ̰¡ ¾øÀ¸¹Ç·Î <!> ±»ÀÌ select¸¦ »ç¿ëÇÒ ÇÊ¿ä´Â ¾øÀ» °Å¶ó°í »ý°¢µÈ´Ù. ½ÇÁ¦ selectºÎºÐÀ» ÁÖ¼®Ã³¸®Çصµ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù.

»ç¿ë¹æ¹ý

TAIL *opentail(char *fname); 
int readtail(TAIL *LTAIL, char *buf, size_t size, int sec); 
void closetail(TAIL *LTAIL); 
 
  • opentailÀº tailÀ» Àû¿ëÇÒ ÆÄÀÏÀ» ¿­±â À§Çؼ­ »ç¿ëÇÑ´Ù. ½ÇÆÐÇϸé NULLÀ» ¸®ÅÏÇÏ°í ¼º°øÇϸé TAIL °´Ã¼(±¸Á¶Ã¼ Æ÷ÀÎÅÍ)¸¦ ¸®ÅÏÇÑ´Ù.
  • readtailÀº TAIL °´Ã¼¸¦ ÀÌ¿ëÇØ¼­ ÆÄÀÏ·Î ºÎÅÍ Ãß°¡µÈ ³»¿ëÀ» ÁÙ´ÜÀ§·Î ÀÐ¾î ¿Â´Ù. ÁÙÀÌ Ãß°¡µÇ¸é size¸¸Å­ Àо buf¿¡ º¹»çÇÑ´Ù. Ãß°¡µÈ ÁÙÀÌ ¾øÀ» °æ¿ì sec¸¸Å­ ±â´Ù¸°´Ù.
  • ÀÔ·ÂµÈ ÁÙÀ» ÀÐ¾î ¿Ô´Ù¸é 1À» ¸®ÅÏÇÏ°í ¾î¶² ÀÌÀ¯·Î ½ÇÆÐ ÇßÀ» °æ¿ì -1À» ¸®ÅÏÇÑ´Ù.

#include "tail.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <vector> 
using namespace std; 
int main(int argc, char **argv) 
{ 
  vector<TAIL *> tflist; 
  TAIL *tf; 
  char *buf; 
  int n, i; 
 
  // 2°³ ÀÌ»óÀÇ ÆÄÀÏ¿¡ ´ëÇØ¼­ tail °¡´ÉÇÏ´Ù. 
  for(i = 1; i < argc; i++) 
  { 
    if((tf = opentail(argv[i])) == NULL) 
    { 
      perror("error "); 
      exit(1); 
    } 
    tflist.push_back(tf); 
  } 
 
  buf = (char *)malloc(1024); 
  int issleep = 0; 
  while(1) 
  { 
    issleep = 0; 
    for(i = 0; i < tflist.size(); i++) 
    { 
      n = readtail(tflist[i], buf, 1023, 1); 
      if(n > 0) 
        printf("%d : %s", i, buf); 
      issleep |= n; 
    } 
 
    if (issleep == 0) 
    { 
      sleep(1); 
      printf("Sleep\n"); 
      continue; 
    } 
  } 
  //closetail(tf); 
  free(buf); 
} 
 

ÄÚµå

#include <sys/types.h> #include <sys/time.h> #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <sys/stat.h> #include <errno.h> /* * tail °ü¸®¸¦ À§ÇÑ °´Ã¼ */ typedef struct _TAIL { FILE *fp; // ÆÄÀÏ ½ºÆ®¸² char filename[256]; // ¿ÀÇÂÇÑ ÆÄÀÏ À̸§ int fd; // ÆÄÀÏ ½ºÆ®¸²¿¡ ´ëÇÑ ÆÄÀÏ ÁöÁ¤ÀÚ int revsize; // ÃÖ±Ù¿¡ Àоú´ø ÆÄÀÏ Å©±â } TAIL; /* * tailÀ» Àû¿ëÇÒ ÆÄÀÏÀ» ¿¬´Ù. */ TAIL *opentail(char *fname) { TAIL *MTAIL; struct stat fbuf; MTAIL = (TAIL *)malloc(sizeof(TAIL)); if ((MTAIL->fp = fopen(fname, "r")) == NULL) { return NULL; } if (stat(fname, &fbuf) < 0) { return NULL; } strncpy(MTAIL->filename, fname, 255); // ¿­¸° ÆÄÀÏ ½ºÆ®¸²ÀÇ ÆÄÀÏÁöÁ¤ÀÚ¸¦ ¾ò¾î¿Â´Ù. MTAIL->fd = fileno(MTAIL->fp); MTAIL->revsize = fbuf.st_size; return MTAIL; } /* * sec½Ã°£ °£°ÝÀ¸·Î ÆÄÀÏ¿¡ Ãß°¡µÈ ³»¿ëÀ» Àоî¿Â´Ù. * ¸¸¾à Áö±ÝÀÇ ÆÄÀÏÅ©±â°¡ ÀÌÀü ÆÄÀÏÅ©±â º¸´Ù ÀÛ´Ù¸é * ÆÄÀÏÀÌ truncate() µÇ¾ú´Ù°í °¡Á¤Çϰí ù¶óÀÎ ºÎÅÍ * ´Ù½Ã ÀÐ¾î µéÀδÙ. */ int readtail(TAIL *LTAIL, char *buf, size_t size, int sec) { fd_set rfds; struct timeval tv; int n, retval; char *ret; int fd; struct stat fbuf; FD_ZERO(&rfds); FD_SET(LTAIL->fd, &rfds); tv.tv_sec = sec; tv.tv_usec = 0; retval = select(LTAIL->fd+1, &rfds, NULL, NULL, &tv); if (retval) { ret = fgets(buf, size, LTAIL->fp); if (stat(LTAIL->filename, &fbuf) < 0) { return -1; } if (ret == NULL) { // ÇöÀç ÆÄÀÏÅ©±â°¡ ÀÌÀü ÆÄÀÏ Å©±â º¸´Ù // ÀÛ´Ù¸é rewind()½ÃŲ´Ù. if (fbuf.st_size < LTAIL->revsize) { rewind(LTAIL->fp); } LTAIL->revsize = fbuf.st_size; return 0; } LTAIL->revsize = fbuf.st_size; return 1; } else { return -1; } return 1; } void closetail(TAIL *LTAIL) { fclose(LTAIL->fp); free(LTAIL); }

Âü°í¹®¼­

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.