PIPEÀÇ »ç¿ë
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

À¯´Ð½º°ü¸®ÀÚ ¸Å¿ì ÀÏ»óÀûÀ¸·Î pipe ¸¦ »ç¿ëÇÑ´Ù. ¾Æ·¡ÀÇ ¿¹Á¦¸¦ º¸¶ó
[yundream@localhost test]# ls -al | less
[yundream@localhost test]# ps -aux | grep httpd | grep -v grep
À¯´Ð½ºÀÇ Ã¶ÇÐÀº "ÀÛÀº°ÍÀÌ ¾Æ¸§´ä´Ù" ÀÌ´Ù. ÀÚ½ÅÀÌ ÇÒ¼ö ÀÖ´Â Çѵΰ¡Áö Àϸ¸À» ¸íÈ®ÇÏ°Ô ½ÇÇàÇØÁÖ¸ç, ÀÌ·¯ÇÑ ÀÚ±â Àϸ¸ "È®½ÇÈ÷" Àü´ãÇÏ´Â ¼ö¸¹Àº ÇÁ·Î±×·¥µéÀÌ ¸¶Ä¡ ·¹°í ºí·°Ã³·³ ¼­·Î¼­·Î ¿¬°áµÇ¾î¼­ °­·ÂÇÑ ÈûÀ» ¹ßÈÖÇÏ°Ô µÈ´Ù.
PIPE ´Â ÀÌ·¯ÇÑ °¢°¢ÀÇ ÇÁ·Î±×·¥µéÀ» ¼­·Î ¿¬°á½Ã۱â À§ÇØ Á¸ÀçÇÏ´Â IPC ¼³ºñÁßÀÇ ÇϳªÀ̸ç, ¼­¹®¿¡¼­ ¹àÇûµíÀÌ, °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖÀ¸¸ç, ¿ª»çµµ ¿À·¡µÇ¾ú´Ù.
´ÙÀ½Àº pipe ¸¦ ÀÌ¿ëÇѰ£´ÜÇÑ ¿¹Á¦ÀÌ´Ù.

¿¹Á¦ : pipe.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    char buf[256];

    printf("¸í·É¾î ½ÇÇà ½© : %s\n", getenv("SHELL"));
    fp = popen("ls -al", "r");

    while(fgets(buf, 256, fp))
    {
        printf("%s\n", buf);
    }

    pclose(fp);
}
ÆÄÀÌÇÁ´Â popen(3)À» ÅëÇØ¼­ ¸¸µé¾îÁö¸ç, Àб⳪, ¾²±â Àü¿ëÀÇ ÆÄÀϽºÆ®¸²À» µ¹·ÁÁØ´Ù. popen Àº ´ÜÁö read-only ³ª write-only ·Î ¿­¼ö ÀÖÀ¸¸ç, read and write ·Î´Â ¿­¼ö°¡ ¾ø´Â ¹ÝÀÌÁß(´Ü¹æÇâ)µ¥ÀÌŸ È帧¸¸À» Á¦°øÇÑ´Ù. ÀüÀÌÁß(¾ç¹æÇâ)ÀÇ µ¥ÀÌŸÈ帧À» Áö¿ø¹Þ°í ½Í´Ù¸é pipe ÀÇ ¶Ç´Ù¸¥ ÇüÅÂÀÎ FIFO¸¦ »ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù. - pipe ´Â µ¿ÀÏÇÑ PPID¸¦ °¡Áø ÇÁ·Î¼¼½º»çÀÌ¿¡¼­¸¸ µ¥ÀÌŸ Àü¼ÛÀÌ °¡´ÉÇÏ´Ù. FIFO ´Â ÀÌ·¯ÇÑ ¹®Á¦¿ª½Ã ÇØ°á½ÃÄÑÁØ´Ù -
pipe.c ¿¹Á¦ ¿¡¼­ ¿ì¸®´Â "ls -al" À» Àбâ Àü¿ëÀ¸·Î ¿­¾ú´Ù.
popen À» ÀÌ¿ëÇØ¼­ ½ÇÇàµÇ´Â ¸í·É¾î´Â ȯ°æº¯¼ö¿¡ SHELL ¿¡ µî·ÏµÇ¾î ÀÖ´Â ¸í·É¾î ÇØ¼®±â¸¦ ÅëÇØ¼­ ½ÇÇàµÈ´Ù. Áï À§ÀÇ ls -al Àº ½ÇÁ¦·Î "/bin/bash -c ls -al" ÀÇ Çü½ÄÀ¸·Î ½ÇÇàµÇ°Ô µÈ´Ù.
ls -al À» ½ÇÇàÇØ¼­ ¾ò¾îÁø °ªÀº Ç¥ÁØÃâ·Â Çü½ÄÀ¸·Î ÆÄÀÌÇÁ¸¦ ÅëÇØ¼­ Àü´ÞµÇ¸ç, À̰ÍÀº ÆÄÀϽºÆ®¸²À» À§ÇØ Á¦°øÇÏ´Â fgets, fputs µîÀÇ ÇÔ¼ö¸¦ ÅëÇØ¼­, Àаųª ¾µ¼ö ÀÖ°Ô µÈ´Ù.
À§ÀÇ ¸í·ÉÀ» ½ÇÇàÇϸé ls -al À» ½ÇÇàÇØ¼­ ¾ò¾îÁø °á°ú¸¦ Ãâ·ÂÇÏ°Ô µÈ´Ù.
ls -al

¸ÞÀÏ¹ß¼Û ÇÁ·Î±×·¥
À̹ø¿¡´Â ¸ÞÀÏ¹ß¼Û ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ.
ÀÌ ÇÁ·Î±×·¥Àº mysql ÀÇ user(°í°´ db)¿¡ Á¢±ÙÇØ¼­ µî·ÏµÈ user ÀÇ email ÁÖ¼Ò·Î °ü¸®ÀÚ°¡ ÀÛ¼ºÇÑ ¸ÞÀÏÀ» º¸³»ÁÖ´Â ÀÏÀ»Çϸç, ¸ÞÀϳ»¿ë¿ª½Ã mail Å×ÀÌºí¿¡ µî·ÏµÇ¾î ÀÖ´Ù.
´ÙÀ½Àº User table ¿Í mail Å×À̺íÀÇ ±¸Á¶ÀÌ´Ù.
user Å×À̺í
Å×ÀÌºí±¸Á¶

¸ÞÀÏÀ» ¹ß¼ÛÇϱâ À§Çؼ­ ¿ì¸®´Â sendmail À» ÀÌ¿ëÇÒ°ÍÀ̸ç, popen À» ÅëÇØ¼­ write ¸ðµå·Î ¿­°í mail Å×À̺íÀÇ ³»¿ëÀ» Åä´ë·Î ¸ÞÀÏÀ» ¸¸µé°í, À̰ÍÀ» sendmail ·Î write ÇÏ°Ô µÉ°ÍÀÌ´Ù.
sendmail ¿¡¼­ -v ¿É¼ÇÀ» »ç¿ëÇÏ°Ô µÇ¸é, ¸ÞÀϹ߼۰úÁ¤À» È®ÀÎÇÒ¼ö ÀÖ¾î, µð¹ö±×¸ðµå·Î »ç¿ëµÉ¼ö ÀÖ´Ù.
-t ¿É¼ÇÀÇ °æ¿ì¿¡´Â sendmail ÀÌ ¸ÞÀÏ Çì´õÀÇ "To, Cc, Bcc" ¸¦ ÆÄ½ÌÇØ¼­, ÇØ´ç ¸ÞÀÏÁÖ¼Ò·Î ¸ÞÀÏÀ» ¹ß¼ÛÇÏ°Ô µÈ´Ù.
ÇÁ·Î±×·¥Àº ¿©·¯°³ÀÇ ¸ðµâÀ» °¡Áø ¿©·¯°³ÀÇ ÆÄÀÏ·Î ±¸¼ºµÉ¼ö ÀÖ°ÚÁö¸¸, ½î¾² ÆÄÀÏ ¼³¸íÀÇ Æí¸®ÇÔÀ» ÀÌÀ¯·Î ´ÜÀÏ ÆÄÀÏÀ» °¡Áø ½î¾²·Î ¸¸µé°Ô µÉ°ÍÀ̸ç, Áß¿äÄ¡ ¾Ê´Ù°í »ý°¢µÇ´Â ºÎºÐÀÇ ¿¡·¯Ã³¸®µî °ú °°Àº ºÎºÐÀº »ý·«ÇÒ °ÍÀÌ´Ù.
mysql Å×À̺íÀÇ ³»¿ëÀº °¢ÀÚ È¯°æ¿¡ ¸Â°Ô °³ÀÎÀûÀ¸·Î ÀÛ¼ºÇϱ⠹ٶó¸ç, mysql ȯ°æÀ» ±¸ÃàÇϱ⠾î·Á¿ï°æ¿ì ÆÄÀϽýºÅÛÀ» ÀÌ¿ëÇϵµ·Ï ÇÑ´Ù.
mysql ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ³»¿ëÀº mysql ÇÁ·Î±×·¡¹Ö À» ÂüÁ¶Çϱ⠹ٶõ´Ù.

send_mail.c
#include <stdio.h>
#include <mysql.h>
#include <string.h>

#define DB_HOST "127.0.0.1" 
#define DB_USER "root"
#define DB_PASS "1111"
#define DB_NAME "user"

// ¸ÞÀϳ»¿ëÀ» ÀúÀåÇϱâ À§ÇÑ ±¸Á¶Ã¼
struct mail_con
{
    char subject[80];
    char sender[40];
    char content_type[80];
    char body[1024];
};

int main (int argc, char **argv)
{
    MYSQL       *connection = NULL, conn;
    MYSQL_RES   *sql_result;
    MYSQL_ROW   sql_row;
    FILE        *fp;
    int           query_stat;
    struct mail_con user_mail;

    // MYSQL DB ¿¡ ¿¬°áÀ» ÇÑ´Ù.
    mysql_init(&conn);
    connection = mysql_real_connect(&conn, DB_HOST, DB_USER,
                                        DB_PASS, DB_NAME,
                                        3306,
                                        (char *)NULL, 0);

    if (connection == NULL)
    {
        fprintf(stderr, "Mysql connection error : %s", 
                        mysql_error(&conn));
        return 1;
    }

    // ¸ÞÀÏ ³»¿ëÀ» °¡Á®¿Â´Ù.
    query_stat = mysql_query(connection, "select * from mail");
    if (query_stat != 0)
    {
        fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
        return 1;
    }
    
    sql_result = mysql_store_result(connection);
    sql_row = mysql_fetch_row(sql_result); 
    memcpy(user_mail.subject, sql_row[0], 80);
    memcpy(user_mail.sender, sql_row[1], 40);
    memcpy(user_mail.content_type, sql_row[2], 80);
    memcpy(user_mail.body, sql_row[3], 1024);
    mysql_free_result(sql_result);
    
    // ¸ÞÀÏÁÖ¼Ò¸¦ °¡Á®¿Â´Ù.
    query_stat = mysql_query(connection, "select * from user");
    if (query_stat != 0)
    {
        fprintf(stderr, "Mysql query error : %s/n", mysql_error(&conn));
        return 1;
    }

    sql_result = mysql_store_result(connection);
    // ¸ÞÀÏ À¯Àú¿¡°Ô ¸ÞÀÏÀ» ¹ß¼ÛÇÑ´Ù.
    while((sql_row = mysql_fetch_row(sql_result)) != NULL)
    {
#ifdef __DEBUG__
        fp = popen("/usr/sbin/sendmail -v -t ", "w");
#else
        fp = popen("/usr/sbin/sendmail -t ", "w");
#endif
        fprintf(fp, "Subject: %s\n", user_mail.subject);
        fprintf(fp, "To: %s\n", sql_row[1]);
        fprintf(fp, "From: %s\n", user_mail.sender);
        fprintf(fp, "Content-Type: %s\n", user_mail.content_type);
        fprintf(fp, "\n%s\n", user_mail.body);

        pclose(fp);
    }
    mysql_free_result(sql_result);
    mysql_close(connection);
}
À§ÀÇ ÇÁ·Î±×·¥Àº Àß ÀÛµ¿À» Çϱä ÇÏÁö¸¸, Çѹø¿¡ ÇÑ¸í¾¿¿¡°Ô¸¸ ¸ÞÀÏÀ» ¹ß¼ÛÇÑ´Ù. ¹ß¼ÛÇϰíÀÚ ÇÏ´Â À¯Àú°¡ ¼ö¹é¸í Á¤µµ¶ó¸é ±×·°Àú·° º¸³¾¸¸ ÇϰÚÁö¸¸, ¼öõ, ¼ö¸¸¸í À̶ó¸é »ó´çÇÑ ½Ã°£ÀÌ °É¸±°ÍÀÌ´Ù. ±×¸®°í ¸ÞÀÏÀ» º¸³»±âÀü¿¡, ½ÇÁ¦·Î ¸ÞÀϼ­¹ö°¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇϴ°͵µ ÁÁÀ»°ÍÀÌ´Ù. º¸Åë ¸ÞÀÏÀü¼ÛÀÌ ´Ê¾îÁö´Â °æ¿ì´Â ¼­¹ö°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª, ¹®Á¦°¡ ¹ß»ýÇØ¼­ ±×°É È®ÀÎÇÏ´Â °úÁ¤¿¡¼­ ½Ã°£ÀÌ ¿À·¡ °É¸®±â ¶§¹®ÀÌ´Ù.
ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­´Â ÇÁ·Î¼¼½º¸¦ Çѹø¿¡ ¿©·¯¹ø ¶ç¿ö¼­ ÀÛ¾÷À» Çϵµ·Ï ¼öÁ¤Çϰí, ¹Þ´ÂÂÊ ¸ÞÀϼ­¹ö°¡ ½ÇÁö·Î Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÏ´Â ·çƾÀ» Ãß°¡ÇÏ¸é µÉ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¹æ¹ý¿¡ ´ëÇØ¼­´Â ¿¬±¸Çغ¼ Çʿ䰡 ÀÖÀ»°Í À̰í À̹®¼­´Â ÀÌÂë¿¡¼­ ¸¶Ä¡µµ·Ï ÇϰڴÙ.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.