À¯´Ð½º°ü¸®ÀÚ ¸Å¿ì ÀÏ»óÀûÀ¸·Î 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 À» ½ÇÇàÇØ¼ ¾ò¾îÁø °á°ú¸¦ Ãâ·ÂÇÏ°Ô µÈ´Ù.
¸ÞÀÏ¹ß¼Û ÇÁ·Î±×·¥
À̹ø¿¡´Â ¸ÞÀÏ¹ß¼Û ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ.
ÀÌ ÇÁ·Î±×·¥Àº 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);
}
|
À§ÀÇ ÇÁ·Î±×·¥Àº Àß ÀÛµ¿À» Çϱä ÇÏÁö¸¸, Çѹø¿¡ ÇÑ¸í¾¿¿¡°Ô¸¸ ¸ÞÀÏÀ» ¹ß¼ÛÇÑ´Ù.
¹ß¼ÛÇϰíÀÚ ÇÏ´Â À¯Àú°¡ ¼ö¹é¸í Á¤µµ¶ó¸é ±×·°Àú·° º¸³¾¸¸ ÇϰÚÁö¸¸,
¼öõ, ¼ö¸¸¸í À̶ó¸é »ó´çÇÑ ½Ã°£ÀÌ °É¸±°ÍÀÌ´Ù. ±×¸®°í ¸ÞÀÏÀ» º¸³»±âÀü¿¡,
½ÇÁ¦·Î ¸ÞÀϼ¹ö°¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇϴ°͵µ ÁÁÀ»°ÍÀÌ´Ù. º¸Åë ¸ÞÀÏÀü¼ÛÀÌ
´Ê¾îÁö´Â °æ¿ì´Â ¼¹ö°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª, ¹®Á¦°¡ ¹ß»ýÇØ¼ ±×°É È®ÀÎÇÏ´Â
°úÁ¤¿¡¼ ½Ã°£ÀÌ ¿À·¡ °É¸®±â ¶§¹®ÀÌ´Ù.
ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ´Â ÇÁ·Î¼¼½º¸¦ Çѹø¿¡ ¿©·¯¹ø ¶ç¿ö¼
ÀÛ¾÷À» Çϵµ·Ï ¼öÁ¤Çϰí, ¹Þ´ÂÂÊ ¸ÞÀϼ¹ö°¡ ½ÇÁö·Î Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÏ´Â
·çƾÀ» Ãß°¡ÇÏ¸é µÉ°ÍÀÌ´Ù.
ÀÌ·¯ÇÑ ¹æ¹ý¿¡ ´ëÇØ¼´Â ¿¬±¸Çغ¼ Çʿ䰡 ÀÖÀ»°Í
À̰í À̹®¼´Â ÀÌÂë¿¡¼ ¸¶Ä¡µµ·Ï ÇϰڴÙ.