syslog »ç¿ëÇϱâ 2
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



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

ÀÌÁ¦ memrecver ¿¡ ¼ÒÄÏ¿¬°áÈÄ syslog ¸Þ½ÃÁö¸¦ Àü¼ÛÇÏ´Â memsender ¸¦ Á¦ÀÛÇØ º¸µµ·ÏÇÏÀÚ, º¸ÅëÀÇ ÆÄÀÏÀ» ¿­¾î¼­ ÀÐÀº ´ÙÀ½¿¡ ¼ÒÄÏÀ¸·Î Àü¼ÛÇÏ´Â ÀϹÝÀûÀÎ ·çƾÀ» °¡Áö°í ÀÖÁö¸¸, ÆÄÀÏÀÇ ¸¶Áö¸·¶óÀÎÀ» ¸¸³ª´õ¶óµµ, ÆÄÀÏ ¿¬°áÁö½ÃÀÚ¸¦ °è¼Ó À¯ÁöÇϰí ÀÖ´Ù°¡ »õ·Î¿î ³»¿ëÀÌ Ãß°¡µÇ¸é ´Ù½Ã read ÇØ¾ß ÇϹǷÎ(À̸¦Å׸é tail ¿¡ -f ¿É¼ÇÀ» ÁذͰú ºñ½ÁÇÑ), select(2) ¸¦ ÅëÇØ¼­ À̸¦ ±¸ÇöÇϵµ·Ï ÇϰڴÙ.
select ´Â ÀÔÃâ·Â´ÙÁßÈ­¸¦ À§ÇÑ ¸ñÀûÀ¸·Î ÁÖ·Î ¾²À̸ç, ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö¿¡¼­ ´ÙÁß Å¬¶óÀÌ¾ðÆ®¸¦ ¹Þ¾ÆµéÀÌ´Â ¼­¹öÁ¦ÀÛ ±â¹ýÀ¸·Î ¸¹ÀÌ È°¿ëµÈ´Ù.

¿¹Á¦: memsender.c
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>

#define PORT 12345
#define PACKET_SIZE 255

int main()
{
    int fd;
    int n;
    int state;
    int client_len;
    int client_sockfd;
    int i;
    FILE *fp;
    char *buf;

    char l_buf[1];

    struct sockaddr_in clientaddr;
    struct timeval tv;

    fd_set readfds;

    if((fd = open("/var/log/meminfo", O_RDONLY)) == -1)
    {
        perror("file open error : ");
        exit(0);
    }


    // memrecver ¼­¹ö¿¡ ¿¬°áÀ» À§ÇÑ ¼ÒÄÏ»ý¼º¹× ¿¬°á

    client_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    clientaddr.sin_family = AF_INET;
    clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    clientaddr.sin_port = htons(PORT);

    client_len = sizeof(clientaddr);

    if (connect(client_sockfd, (struct sockaddr *)&clientaddr, client_len) < 0)
    {
        perror("connect error : ");
        exit(0);
    }

    fp = fdopen(fd, "w");
    buf = (char *)malloc(PACKET_SIZE);
    i = 0;
    while(1)
    {
        tv.tv_sec = 0;
        tv.tv_usec = 10000;

        state = select(2, &readfds, (fd_set *)0, (fd_set *)0, &tv);

        switch(state)
        {
            case -1:
                perror("select error : ");
                exit(0);

            default :
                memset(buf, 0x00, PACKET_SIZE);
                while ((n = read(fd, l_buf, 1)) > 0)
                memset(buf, 0x00, PACKET_SIZE);
                while ((n = read(fd, l_buf, 1)) > 0)
                {
                    buf[i] = l_buf[0];
                    if (l_buf[0] == '\n')
                    {
                        write(client_sockfd, buf, i+1);
                        printf("-->%s", buf);
                        memset(buf, 0x00, PACKET_SIZE);
                        i = 0;
                        continue;
                    }
                    i++;
                }
                break;
        }
    }
    close(fd);
}
select °¡ µé¾î°£°Í¸¸ »©°í´Â ¸Å¿ì ÀϹÝÀûÀÎ ÇÁ·Î±×·¥À̹ǷΠ¼³¸íÀº »ý·«Çϵµ·Ï ÇϰڴÙ.
¼ÒÄϰü·Ã ÇÁ·Î±×·¡¹ÖÀº ¼ÀÇ÷Π¾Ë¾Æº¸´Â ¼ÒÄÏÇÁ·Î±×·¡¹Ö(1)À» >Âü°íÇϱ⠹ٶõ´Ù.

¿¹Á¦: memrecever.c
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h> 
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/stat.h> 
#include <netinet/in.h>
#include <arpa/inet.h> 
#include <fcntl.h> 

#define SA struct sockaddr
#define PACKET_SIZE 255 

const char *needle = ": ";

int main(int argc, char **argv)
{
    int server_sockfd, client_sockfd;
    int state, clilen;
    int n;

    FILE *fp;

    struct sockaddr_in clientaddr, serveraddr;
    char buf_in[PACKET_SIZE];
    char buf_out[PACKET_SIZE];
    char *par_buf;

    // ¼ÒÄÏ¿¬°áÀ» ¸¸µç´Ù.
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    bzero(&serveraddr, sizeof(serveraddr));

    serveraddr.sin_family = AF_INET;
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
    serveraddr.sin_port = htons(12345);

    if(bind (server_sockfd, (SA *)&serveraddr, sizeof(serveraddr)) == -1)
    {
        perror("bind error : ");
        exit(0);
    }

    if ((state = listen(server_sockfd, 5)) == -1)
    {
        perror("listen error : ");
        exit(0);
    }

    while(1)
    {
        clilen = sizeof(clientaddr);
        memset(buf_in, 0x00, PACKET_SIZE);

        if ((client_sockfd = accept(server_sockfd, (SA *)&clientaddr, &clilen)) == -1)
        {
            perror("Accept error : ");
            close(client_sockfd);
            continue;
        }
        while(1)
        {
            if ( (n = read(client_sockfd, buf_in, PACKET_SIZE)) <= 0)
            {
                perror("read error : ");
                close(client_sockfd);
                break;
            }
            if ((par_buf = strstr(buf_in, needle)) != NULL)
            {
                printf("%s", par_buf+2);
            }

            memset(buf_in, 0x00, PACKET_SIZE);
        }
    }
}
ÀÌ ÇÁ·Î±×·¥Àº ¼ÒÄÏÀ» ÅëÇØ¼­ ¸Þ¸ð¸® »óȲÀ» ¹Þ¾Æ¼­ Ãâ·Â¸¸ ÇØÁØ´Ù.
¹ÞÀº ¹®ÀÚ¿­À» ÆÄ½ÌÇØ¼­ ±×·²µíÇÏ°Ô º¸¿©ÁÖ´Â°Ç ¿©·¯ºÐµé¿¡°Ô ¸Ã±âµµ·Ï ÇϰڴÙ.
ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀº °¡Àå¸ÕÀú memchecker À» ½ÇÇàÇÏ°í ´ÙÀ½ memrecevier À» ½ÇÇàÇϰí, memsenderÀ» ½ÇÇàÇÏ¸é µÈ´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.