À©µµ ÀÍ¸í ÆÄÀÌÇÁ
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

À©µµ ÀÍ¸í ÆÄÀÌÇÁ

¸®´ª½ºÀÇ ÀÍ¸í ÆÄÀÌÇÁ¿Í µ¿ÀÏÇÑ Æ¯¼ºÀ» °¡Áö¸ç, »ç¿ë¹æ¹ý ¿ª½Ã À¯»çÇÏ´Ù. Áï
  • ºÎ¸ð ÇÁ·Î¼¼½º¿Í ÀÚ½Ä ÇÁ·Î¼¼½º°£ÀÇ Åë½Å
  • ÀбâÀü¿ë°ú ¾²±âÀü¿ëÀÇ µÎ°³ÀÇ ÆÄÀÌÇÁ·Î Àü ÀÌÁß Åë½ÅÀÇ ±¸Çö
  • ´Ù¸¥ ÇÁ·Î¼¼½º´Â ÂüÁ¶ÇÒ ¼ö ¾øÀ½.(ÂüÁ¶ÇÒ À̸§ÀÌ ¾ø±â ¶§¹®¿¡)

createpipe·Î ÀÍ¸í ÆÄÀÌÇÁ »ý¼º

¸®´ª½º¿¡ pipe(2)°¡ ÀÖ´Ù¸é À©µµ´Â CreatePipeÇÔ¼ö·Î ÆÄÀÌÇÁ¸¦ ¸¸µç´Ù.
BOOL WINAPI CreatePipe( 
  __out     PHANDLE hReadPipe, 
  __out     PHANDLE hWritePipe, 
  __in_opt  LPSECURITY_ATTRIBUTES lpPipeAttributes, 
  __in      DWORD nSize 
); 
 
pipe¿Í ¸¶Âù°¡Áö·Î ÀбâÀü¿ë (hReadPipe)¿Í ¾²±âÀü¿ë (hWritePipe)ÀÇ µÎ°³ÀÇ ÆÄÀÌÇÁ¸¦ ¸¸µç´Ù. nSize´Â ¹öÆÛÀÇ Å©±â·Î 0À» ÀÔ·ÂÇÏ¸é ±âº» ¹öÆÛ Å©±â¸¦ »ç¿ëÇÑ´Ù. ÀϹÝÀûÀ¸·Î 0À» »ç¿ëÇÏ¸é µÈ´Ù. ¼º°øÇϸé 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇϰí, ½ÇÆÐÇϸé 0À» ¸®ÅÏÇÑ´Ù.

Åë½ÅÀº ReadFile°ú WriteFile¸¦ ÀÌ¿ëÇÑ´Ù.

¸®´ª½º ÆÄÀÌÇÁ¿ÍÀÇ Â÷ÀÌÁ¡

ÆÄÀÌÇÁÀÇ ±Ùº»ÀûÀΠƯ¡Àº µ¿ÀÏÇÏÁö¸¸, ÇÁ·Î¼¼½º¿¡¼­ÀÇ Â÷À̰¡ ÀÖ´Ù. ¸®´ª½º¿¡¼­ ÀÚ½Ä ÇÁ·Î¼¼½º´Â forkÇÔ¼ö·Î ºÎ¸ðÇÁ·Î¼¼½º¸¦ º¹»çÇØ¼­ ¸¸µé¾îÁø´Ù. ¹Ý¸é À©µµ¿¡¼­ ÇÁ·Î¼¼½º¸¦ ¸¸µé±â À§Çؼ­ »ç¿ëÇÏ´Â CreateProcessÇÔ¼ö´Â ºÎ¸ðÇÁ·Î¼¼½º¸¦ º¹»çÇÏ´Â°Ô ¾Æ´Ñ ¿ÜºÎ ÇÁ·Î¼¼½º¸¦ »õ·Î »ý¼ºÇÏ´Â ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù. Áï ¸®´ª½ºÀÇ fork&exec¸¦ ÇÔ²² »ç¿ëÇÑ °Í°ú ºñ½ÁÇÏ°Ô ÀÛµ¿ÇÑ´Ù°í º¼ ¼ö ÀÖ´Ù.

¸®´ª½º·Î À©µµ ÆÄÀÌÇÁ¸¦ ±¸ÇöÀ» ÀÇ»çÄÚµå·Î ³ªÅ¸³» º¸¾Ò´Ù.
int pd[2]; 
pid = fork(); 
pipe(pd); // ÆÄÀÌÇÁ¸¦ ¸¸µç´Ù. 
 
if(pid == 0) // ÀÚ½Ä ÇÁ·Î¼¼½º 
{ 
    dup2(dup[0], 1);  // Àбâ Àü¿ë ÆÄÀÌÇÁ¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î º¹»çÇÑ´Ù.  
    dup2(dup[1], 0);  // ¾²±â Àü¿ë ÆÄÀÌÇÁ¸¦ Ç¥ÁØÀÔ·ÂÀ¸·Î º¹»çÇÑ´Ù. 
 
    // ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. 
    // ½ÇÇàµÈ ÇÁ·Î±×·¥ÀÇ Ç¥ÁØÀԷ°ú Ç¥ÁØÃâ·ÂÀº °¢°¢ ¾²±âÀü¿ë ÆÄÀÌÇÁ¿Í Àбâ Àü¿ë ÆÄÀÌÇÁ·Î ¿¬°áµÇ¾îÀÖ´Ù.  
    // Ç¥ÁØÀԷ°ú Ç¥ÁØÃâ·ÂÀ¸·Î ÆÄÀÌÇÁ Åë½ÅÀ» ÇÏ¸é µÈ´Ù. 
    execl("Program"); 
} 
else (pid > 0) // ºÎ¸ð ÇÁ·Î¼¼½º 
{ 
   // ÆÄÀÌÇÁ·Î Åë½ÅÇÑ´Ù. 
   read(pd[0]); 
   write(pd[1]); 
} 
 

¿¹Á¦ ÇÁ·Î±×·¥

echo ¼­¹ö, Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ¸¸µé±â·Î Çß´Ù. ¼­¹ö ÇÁ·Î±×·¥ÀÇ À̸§Àº echo_server.c, Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÇ À̸§Àº echo_cli.c ÀÌ´Ù.

¿¹Á¦ : echo_server.c
#include <stdio.h> 
#include <stdio.h> 
#include <windows.h> 
#include <tchar.h> 
 
#define MAX_LINE 1024 
int main(int argc, char **argv) 
{ 
    HANDLE readPipe, writePipe; 
    SECURITY_ATTRIBUTES sec; 
    int writen; 
    int rtv; 
    TCHAR command[80] = {0,}; 
    char buf[MAX_LINE]; 
    STARTUPINFO si = {0,}; 
    PROCESS_INFORMATION pi; 
 
    sec.nLength = sizeof(SECURITY_ATTRIBUTES); 
    sec.bInheritHandle = TRUE; 
    sec.lpSecurityDescriptor = NULL; 
 
    CreatePipe(&readPipe, &writePipe, &sec, 0); 
 
    _stprintf(command, _T("C:\\pipe_cli.exe %d"), (HANDLE)readPipe); 
 
    printf("command : %s\n", command); 
    si.cb = sizeof(si); 
    rtv = CreateProcess( 
        NULL, command, 
        NULL, NULL, 
        TRUE, 
        CREATE_NEW_CONSOLE, 
        NULL, NULL, 
        &si, &pi); 
    if (!rtv) 
    { 
        printf("Error %d\n", GetLastError()); 
        return 1; 
    } 
 
 
    while(1) 
    { 
        printf("> "); 
        fgets(buf, MAX_LINE, stdin); 
        if(strncmp(buf, "quit\n", 5)==0) break; 
        WriteFile(writePipe, buf, strlen(buf), &writen, NULL); 
    } 
    CloseHandle(readPipe); 
    CloseHandle(writePipe); 
} 
 

¿¹Á¦ : echo_cli.c
#include <stdio.h> 
#include <windows.h> 
 
#define MAX_LINE 1024 
int main(int argc, char **argv) 
{ 
    HANDLE readPipe = (HANDLE)(atoi(argv[1])); 
    int readn; 
    char buf[MAX_LINE]; 
 
    while(1) 
    { 
        memset(buf, 0x00, MAX_LINE); 
        ReadFile ( 
            readPipe,  
            buf,  
            MAX_LINE,  
            &readn,  
            NULL 
            ); 
        printf(" --> %s", buf); 
    } 
} 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.