|
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À» ½ÇÇàÇÏ¸é µÈ´Ù.
|
|