ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
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À» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|