ÇÔ¼ö»çÀüÀ» À§Å°ÆäÀÌÁö·Î.
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

¸¸µç³¯ 2003/01/03 http://www.joinc.co.kr/images/myavata/2.gif
°ü¸®ÀÚ yundream
ȨÆäÀÌÁö http://www.joinc.co.kr
À̸ÞÀÏ Myundream_at_joinc.co.kr

Contents

1 ±³Á¤ °úÁ¤
2 Åä·Ð¹× Àâ´ã
3 ¼Ò°³
3.1 ¿Ö À§Å°ÆäÀÌÁö·Î ¿Å±â´Â°¡
3.1.1 google¿¡¼­ÀÇ °Ë»ö¿ëÀ̸¦ À§Çؼ­
3.1.2 À§Å° ÆäÀÌÁö¿¡¼­ Á÷Á¢ÀûÀÎ ÇÔ¼öÂüÁ¶ °¡´ÉÇϵµ·Ï
3.1.3 »ç¿ëÀÚ Çǵå¹éÀÇ ¿ëÀ̼º
4 ÇÔ¼ö»çÀüÀ» À§Å°ÆäÀÌÁö·Î
4.1 ±âº» ¾ÆÀ̵ð¾î
4.2 DB¿¡¼­ ÇÔ¼ö»çÀü Å×ÀÌºí ³»¿ë °¡Á®¿À±â
4.2.1 ÇÔ¼ö »çÀü °ü·Ã Å×À̺í
4.3 wikiÆäÀÌÁö·Î ÀúÀåÇϱâ
5 ÇÁ·Î±×·¥ ÀÛ¼º
5.1 Àüü ÇÁ·Î¼¼½º
5.2 ÄÚµå
5.3 wiki ¸ÞÅ©·Î ÀÛ¼º
5.4 Å×½ºÆ®
6 Âü°í¹®Çå


1 ±³Á¤ °úÁ¤


2 Åä·Ð¹× Àâ´ã


3 ¼Ò°³

joinc¿¡¼­´Â [http]ÇÔ¼ö»çÀüÀ» Á¦°øÇϴµ¥, »çÀüÀÇ ³»¿ëÀ» ¸ðµÎ À§Å°·Î ¿Å±â´Â ÀÛ¾÷À» Çϱâ·Î Çß´Ù. ¿©±â¿¡¼­´Â ¿Å±â´Â °úÁ¤¿¡ ´ëÇØ¼­ ±â¼úÇÑ´Ù.

3.1 ¿Ö À§Å°ÆäÀÌÁö·Î ¿Å±â´Â°¡

3.1.1 google¿¡¼­ÀÇ °Ë»ö¿ëÀ̸¦ À§Çؼ­
¾î¶² ÀÌÀ¯¿¡¼­ÀÎÁö ¸ð¸£°ÚÁö¸¸ [http]google¿¡¼­ ÇÔ¼ö»çÀü¿¡ ÀÖ´Â ÇÔ¼öµéÀÇ ³»¿ëÀÌ °Ë»öµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» È®ÀÎÇß´Ù. ºñ·Ï ³»ºÎÀûÀ¸·Î Joinc ÅëÇÕ°Ë»ö¿£Áø ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇϰí ÀÖ±ä ÇÏÁö¸¸ googleµîÀÇ °Ë»ö¿£Áø¿¡¼­µµ ½±°Ô °Ë»öµÉ ¼ö ÀÖ´Ù¸é ÁÁÀ» °ÍÀÌ´Ù. Áö±Ý ¿î¿µÁßÀÎ À§Å°¿¡ ÀÖ´Â ÆäÀÌÁöµéÀº googleÀ» ÅëÇÑ °Ë»öÀÌ Àß ÀÌ·ç¾î Áö°í ÀÖÀ½À» È®ÀÎÇß°í, ±×·±ÀÌÀ¯·Î À§Å° ÆäÀÌÁö·Î ¿Å±â±â·Î °áÁ¤Çß´Ù.

3.1.2 À§Å° ÆäÀÌÁö¿¡¼­ Á÷Á¢ÀûÀÎ ÇÔ¼öÂüÁ¶ °¡´ÉÇϵµ·Ï
»çÀÌÆ®ÀÇ Æ¯¼º»ó À§Å° ÆäÀÌÁö¿¡ ÇÔ¼öµéÀÌ ÀÚÁÖ µîÀåÇÏ°Ô µÇ´Âµ¥, ÇÔ¼öÀÇ ³»¿ëÀÌ ±Ã±ÝÇÒ°æ¿ì joincÀÇ ÇÔ¼öã±â ±â´ÉÀ» ÀÌ¿ëÇØ¼­ ÇÔ¼ö¸¦ ÂüÁ¶Çؾ߸¸ ÇÑ´Ù. 4-5¹ø Á¤µµÀÇ ¸¶¿ì½º Ŭ¸¯ÀÛ¾÷ÀÌ µé¾î°¼¾ß Çϴµ¥, ½Ã°£µµ ¸¹ÀÌ °É¸®°í ¸Å¿ì ºÒÆíÇÏ´Ù.

À̵é ÇÔ¼ö»çÀüÀÇ ³»¿ëÀ» À§Å°·Î ¸¸µé¸é °ü·Ã ¸ÞÅ©·Î¸¦ ¸¸µé¾î¼­ ¿øÅ¬¸¯À¸·Î ÇÔ¼ö¿¡ ´ëÇÑ ³»¿ëÀÇ È®ÀÎÀÌ °¡´ÉÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ gets(3)¿¡ ´ëÇÑ ÇÔ¼ö¿¡ ´ëÇÑ ¸µÅ©¸¦ ¸¸µé±â¸¦ ¿øÇÑ´Ù¸é
[func:gets(3)] 
 
À§¿Í °°Àº °£´ÜÇÑ ¹æ¹ýÀ¸·Î ¸µÅ©¸¦ ¸¸µé ¼ö ÀÖ´Ù.

3.1.3 »ç¿ëÀÚ Çǵå¹éÀÇ ¿ëÀ̼º
À§Å°ÀÇ Æ¯¼ºÀ¸·Î ¿ëÀÌÇÑ »ç¿ëÀÚ Çǵå¹éÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù. ÇÊ¿äÇÏ´Ù¸é wikiÀü¿ëÀÇ ´ñ±Û ½Ã½ºÅÛÀ» ¸¸µé ¼öµµ ÀÖ´Ù.


4 ÇÔ¼ö»çÀüÀ» À§Å°ÆäÀÌÁö·Î

4.1 ±âº» ¾ÆÀ̵ð¾î

ÇöÀç ÇÔ¼ö»çÀüÀÇ ¸ðµç ³»¿ëÀº DB¸¦ ÅëÇØ¼­ °ü¸®µÈ´Ù. °£´ÜÇÑ ½ºÅ©¸³Æ®¸¦ ÀÌ¿ëÇØ¼­ °¢°¢ÀÇ ÇÔ¼öÀ̸§°ú ÇÔ¼öÀ̸§¿¡ ´ëÇÑ ¼³¸íÀÌ µé¾î ÀÖ´Â ÇʵåÀÇ Á¤º¸¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù. ±×·¯¸é ÀÌµé ³»¿ëÀ» Åä´ë·Î wikiÆäÀÌÁö¸¦ ¸¸µç´Ù.

4.2 DB¿¡¼­ ÇÔ¼ö»çÀü Å×ÀÌºí ³»¿ë °¡Á®¿À±â

DB¿¡¼­ ³»¿ëÀ» °¡Á®¿À±â À§Çؼ­ ÇÔ¼ö»çÀü¿¡ »ç¿ëµÇ´Â Å×À̺íÀÇ ±¸Á¶¸¦ ºÐ¼®ÇÒ Çʿ䰡 ÀÖ´Ù. ÇÔ¼ö»çÀü¿¡´Â joinc_encyclopedia¿Í joinc_encyclopedia_text µÎ°³ÀÇ Å×À̺íÀÌ »ç¿ëµÈ´Ù.

4.2.1 ÇÔ¼ö »çÀü °ü·Ã Å×À̺í
  • joinc_encyclopedia¿¡´Â »çÀüÀÇ Å¸ÀÔ°ú ¼³¸íµîÀÌ ÀԷµȴÙ. joincÀÇ »çÀüÀº ¿©·¯ Á¾·ùÀÇ »çÀüÀÌ µ¿½Ã¿¡ ¿î¿ëµÉ ¼ö ÀÖÀ¸¹Ç·Î »çÀüÀÇ ÇÁ·ÎÅäŸÀÔÀÇ Á¤ÀǸ¦ À§ÇÑ Å×À̺íÀÌ º°µµ·Î ÇÊ¿äÇÏ´Ù.
    1 Field Type Null Key Default Extra
    2 eid int PRI NULL auto_inc
    3 title varchar
    4 description text
    5 counter int
    1. eid : »õ·Î¿î »çÀüÀÌ Ãß°¡µÉ¶§ ¸¶´Ù 1¾¿ Áõ°¡Çϸç ÇÔ¼ö³»¿ë¿¡ ´ëÇÑ À妽º °ªÀÌ µÈ´Ù.
    2. title : eid¹øÈ£¸¦ °¡Áö´Â »çÀü¿¡ ´ëÇÑ Á¦¸ñ
    3. description : »çÀü¿¡ ´ëÇÑ »ó¼¼ ¼³¸í
    4. counter : ¹æ¹® Ä«¿îÆ®


  • joinc_encyclopedia_text¿¡´Â ½ÇÁúÀûÀÎ ³»¿ëÀÌ µé¾î°£´Ù.
    1 Field Type Null Key Default Extra
    2 tid int PRI NULL auto_inc
    3 eid int 0
    4 title varchar
    5 text text
    6 counter int 0
    1. tid : »çÀü³»¿ë¿¡ ´ëÇÑ ÀϷùøÈ£
    2. eid : »çÀü³»¿ëÀÌ ¾î´À »çÀü¿¡ Æ÷ÇԵȰÍÀÎÁö¿¡ ´ëÇÑ Á¤º¸·Î joinc_encyclopedia.eid¸¦ À妽ºÇÑ´Ù.
    3. title : »çÀü³»¿ë¿¡ ´ëÇÑ Á¦¸ñ
    4. text : ½ÇÁúÀûÀÎ »çÀü³»¿ë
    5. counter : ¹æ¹® Ä«¿îÆ®

4.3 wikiÆäÀÌÁö·Î ÀúÀåÇϱâ

DB¸¦ µÚÁ®¼­ ÇÔ¼ö»çÀü ³»¿ëÀ» ¾ò¾î¿Ô´Ù¸é, ¾ò¾î¿Â ³»¿ëÀ» Åä´ë·Î À§Å°ÆäÀÌÁö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. À§Å°ÆäÀÌÁö´Â ÆÄÀϱâ¹ÝÀ¸·Î [http]RCS¸¦ ÅëÇØ¼­ °ü¸®µÈ´Ù.

ÆÄÀÏ¿¡ ÀúÀåÇÒ ¶§´Â ¸ðµç³»¿ëÀ» ÀúÀåÇÏÁö ¾Ê°í DBÀÇ ³»¿ëÀ» È£ÃâÇÏ´Â wiki macro¸¸À» µî·Ï½Ãų °ÍÀÌ´Ù.
[printency(2,111)] 
 

ÆÄÀÏ·Î ÀúÀåµÇ¹Ç·Î ÆÄÀÏÀ̸§À» Á¤ÇØ¾ß Çϴµ¥ Áߺ¹À» ÇÇÇϱâ À§Çؼ­ ÇÕ¼ö¸í¾Õ¿¡ function_À» ºÙÀ̵µ·Ï ÇÑ´Ù. ½ÇÁ¦ ÀúÀåµÇ´Â À§Å°ÆäÀÌÁö´Â _¸¦ _5f·Î ġȯµÈ´Ù. ¶ÇÇÑ (, )´Â °¢°¢ _28, _29·Î ġȯµÈ´Ù. ¸¸¾à fgets(3)À» µî·Ï½ÃŰ±æ ¿øÇÑ´Ù¸é
function_5ffgets_283_29¶ó´Â À̸§ÀÇ ÆÄÀÏ·Î µî·ÏµÈ´Ù.

µî·ÏµÈ ÈÄ¿¡´Â ÀÌ°É RCS·Î º¸³»¾ß ÇÑ´Ù. À̸¦ À§Çؼ­ ci¸í·ÉÀ» »ç¿ëÇÑ´Ù.
# ci -tfunction_5ffgets_283_29 function_5ffgets_283_29 
±×·¯¸é RCSÆÄÀÏÀÌ »ý¼ºµÈ´Ù. ÀÌÈÄ co¸í·ÉÀ» ÀÌ¿ëÇØ¼­ RCSÆÄÀÏÀ» ´Ù½Ã ¹Þ¾Æ¿Í¼­ ¿øº»ÆÄÀÏÀ» À¯ÁöÇÏ¸é µÈ´Ù.
co function_5ffgets_283_29

À§ÀÇ ³»¿ëÀÌ Àß ÀÌÇØµÇÁö ¾Ê´Â´Ù¸é RCS·¹ÆÛ·±½º ¹®¼­¸¦ ÀÐ¾î º¸±â ¹Ù¶õ´Ù.

5 ÇÁ·Î±×·¥ ÀÛ¼º

ÇÁ·Î±×·¥Àº C¸¦ ÀÌ¿ëÇØ¼­ ÀÛ¼ºµÈ´Ù.

5.1 Àüü ÇÁ·Î¼¼½º

ÇÁ·Î¼¼½º´Â °£´ÜÇÏ´Ù.
int main()
{
  nobody ±ÇÇÑÀ¸·Î º¯°æÇÑ´Ù.
  mysqldb¿¡ Á¢±Ù
  ÇÔ¼ö»çÀüÀ» ¾ò±â À§ÇÑ Äõ¸® ¼öÇà
  while(´õÀÌ»ó »çÀü³»¿ëÀÌ ¾øÀ» ¶§ ±îÁö)
  {
    list(title, text)¸¦ ¾ò¾î¿Â´Ù.
    function_5ftitle À̸§À¸·Î ÆÄÀÏÀ» ¸¸µç´Ù.
    ÆÄÀÏ¿¡ text¸¦ Àû´Â´Ù.
    {
      write wiki¸ÞÅ©·Î
    }
    co¸í·ÉÀ» ÀÌ¿ëÇØ¼­ RCS¿¡ µî·ÏÇÑ´Ù.
    ci¸í·ÉÀ» ÀÌ¿ëÇØ¼­ RCSÀÇ ³»¿ëÀ» °¡Á®¿Â´Ù.
  }
}

5.2 ÄÚµå

ÄÚµå ¿ª½Ã ¸Å¿ì ´Ü¼øÇÏ´Ù. ÀÌ ÄÚµå´Â ±×·°Àú·° µ¹¾Æ°¡Áö¸¸ ¼öÁ¤ÇØ¾ßµÉ ºÎºÐ°ú Ãß°¡ÇØ¾ßµÉ ¸î °¡Áö ±â´ÉµéÀÌ ÀÖ´Ù. °£´ÜÇÑ ÁÖ¼®À¸·Î ¼³¸íÀ» ´ë½ÅÇÑ´Ù.
#include <mysql.h>
#include <string.h>
#include <stdio.h>
#include "jdb.h"
#include <stdlib.h>

static char page_name[80];

// ( ==> _28 
// ) ==> _29
char * replace_tag(char *str)
{
    char null[12];
    char fu[80];
    char num[12];
    sscanf(str,"%[^(]%[(]%[^)]", fu, null, num);
    sprintf(page_name, "%s%s%s%s", fu, "_28", num, "_29");
    return &page_name[0];
}

int main(int argc, char **argv)
{
    MYSQL   *connection = NULL, conn;
    MYSQL_RES *sql_result;
    MYSQL_ROW sql_row;
    int query_stat;
    char wiki_macro[80];
    char wiki_page[80];
    char *perfect_page;
    char man_section[16];
    FILE *fp;

    // MysqlDB¿¡ ¿¬°á  
    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 title, eid, tid from nuke_encyclopedia_text where eid=2");
    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)
    {
        char ci_command[120];
        char co_command[120];
        char title[80];
        if(strlen(sql_row[0]) > 3)
        {
            // wikipage¿¡ µé¾î°¥ ¸ÞÅ©·Î¹®ÀÚ¿­°ú 
            sprintf(wiki_macro, "[[printency(%s,%s)]]\n", sql_row[1], sql_row[2]);
            // wikipage À̸§
            sprintf(wiki_page, "function_5f%s", sql_row[0]);
            // wikipage ŸÀÌÆ²
            sprintf(title, "#title %s\n", sql_row[0]);
            // wikipageÀ̸§À» wiki½ºÅ¸ÀÏ¿¡ ¸Âµµ·Ï º¯°æÇÑ´Ù. 
            perfect_page = replace_tag(wiki_page);

            // RCSµî·ÏÀ» À§ÇÑ ¸í·É
            sprintf(ci_command, "/usr/bin/ci -t%s %s", perfect_page, perfect_page);
            sprintf(co_command, "/usr/bin/co %s", perfect_page);
            if((fp = fopen(perfect_page, "w")) != NULL)
            {
                fputs(title,fp);
                fputs(wiki_macro, fp);
                fclose(fp);
                // RCSµî·ÏÀ» ÇÑ´Ù. 
                system(ci_command);
                system(co_command);
            }
        }
    }
    mysql_free_result(sql_result);
    mysql_close(connection);
    return 0;
}
´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ Çß´Ù.
# gcc -o wikifunc  main.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient -Wall

5.3 wiki ¸ÞÅ©·Î ÀÛ¼º

ÀÌÁ¦ ³²Àº ÀÏÀº prientency ¸ÞÅ©·Î¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀÌ´Ù. moniwiki´Â php±â¹ÝÀ̹ǷΠ¾à°£ÀÇ phpÇÁ·Î±×·¡¹ÖÀÌ ÇÊ¿äÇÏ´Ù. moniwiki/plugin¿¡ printency.php¸¦ ¸¸µé¾ú´Ù. ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
<?php

function macro_printency($formatter,$value='2,1')
{
    global $DBInfo, $dbi;
    $content;
    list($eid, $tid) = split(",", $value);
    if (eregi("[^0-9]", $tid) || eregi("[^0-9]", $eid))
    {
        $content = "À߸øµÈ ID";
        return $content;
    }
        $query = "select text from nuke_encyclopedia_text where tid = $tid and eid = $eid";
    $result = sql_query($query, $dbi);
    if (!$result)
    {
        $content = "Á¸ÀçÇÏÁö ¾Ê´Â ÇÔ¼ö";
                return $content;
    }

    list ($text) = sql_fetch_row($result, $dbi);
    $content  = $text;
    return $content;
}
?>

5.4 Å×½ºÆ®

ÆÄÀÏÀ» ¿­ ¶§´Â open(2)À» ÀÌ¿ëÇÏ°í ÆÄÀÏÀ» ´ÝÀ» ¶§´Â close(2)¸¦ »ç¿ëÇÑ´Ù.

6 Âü°í¹®Çå

  1. [http]RCS ·¹ÆÛ·±½º
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.