ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 dup Ȱ¿ë1.1 dup¿¡ ´ëÇá¿©
dup ÇÔ¼ö°¡ ÇÏ´ÂÀÏÀº ½ÇÁ¦·Î °£´ÜÇÏ´Ù. ´Ü¼øÈ÷ ÆÄÀÏÁöÁ¤¹øÈ£¸¦ º¹»çÇÏ´Â ÀÏÀÌ´Ù. ±×·±µ¥ ¼ÖÁ÷È÷ ¸»Çؼ "dup´Â ÆÄÀÏÁöÁ¤¹øÈ£¸¦ º¹»çÇϱâ À§Çؼ »ç¿ëÇÑ´Ù" ¶ó°í ÇØº¸¾ÒÀÚ.. µµ´ëü ÀÌ°É ¾îµð¿¡ »ç¿ëÇÒ¼ö ÀÖÀ»Áö, Àý´ë °¨ÀÌ ¿ÀÁú ¾Ê´Â´Ù.
ÀÌ·¡¼¾ß ¾²°í ½Í¾îµµ ½á¸ÔÀ»¼ö°¡ ¾øÀ¸´Ï º¸Åë ½½ÇÂÀÏÀÌ ¾Æ´Ï´Ù. ±×·¡¼ À̹ø¹®¼¿¡¼´Â, ¸î°¡Áö ¿¹¸¦ µé¾î¼ dup ÀÇ È°¿ë¹æ¹ý¿¡ ´ëÇØ¼ °í¹Î? À» ÇØº¸°íÀÚ ÇÑ´Ù.
ÀÏ´ÜÀº dup ÇÔ¼ö¿¡ ´ëÇØ¼ ¾Ë¾Æº¸°Ú´Ù.
dup ¿¡´Â 2°¡Áö ÇÔ¼ö°¡ ÀÖ´Ù. ¹Ù·Î dup() ¿Í dup2() Àε¥ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ¼ö ÀÖ´Ù. #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd);2°³ÀÇ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀº °°´Ù. ´Ù¸¸ dup2 ÀÇ °æ¿ì¿¡´Â º¹»çÇÒ »õ·Î¿î ÆÄÀÏÁöÁ¤¹øÈ£¸¦ Áö½ÃÇÒ¼ö Àִ¹ݸé, dup ÀÇ °æ¿ì´Â Ä¿³Î¿¡¼ ÀÚµ¿À¸·Î ÇÒ´çÇØÁشٴ Á¡ÀÌ ´Ù¸£´Ù. dup ¸¦ »ç¿ëÇÏ°Ô µÇ¸é ³²´Â ÆÄÀÏÁöÁ¤¹øÈ£Áß °¡Àå ÀÛÀº ¹øÈ£·Î ÀÚµ¿ÇÒ´ç µÈ´Ù. dup ȤÀº dup2(ÀÌÇÏ dup°è¿) ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ÆÄÀÏÁöÁ¤ÀÚ¸¦ º¹»çÇßÀ»°æ¿ì µð ÆÄÀÏÁöÁ¤ÀÚµéÀº ¶ô, ÆÄÀÏÀ§Ä¡, Ç÷¡±×µîÀ» ¼·Î °øÀ¯ÇÏ°Ô µÈ´Ù. 1.2 dupÀ» ÀÌ¿ëÇÑ ÀçÁöÇâ ±¸Çö
À§¿¡¼ »ìÆìº¸¾ÒµíÀÌ, dup ÇÔ¼öÀÇ ±âº»°³³äÀÚü´Â °£´ÜÇϱä ÇÏÁö¸¸ ÀÌ°É ¾îµð¿¡ »ç¿ëÇÒ¼ö ÀÖÀ»·±Áö°¡ ¾Ö¸Å¸ðÈ£ ÇÏ´Ù. µµ´ëü ÆÄÀÏÁöÁ¤ÀÚ¸¦ °øÀ¯Çؼ ¹«¾óÇÒ¼ö Àִ°ÅÁö? ¶õ »ý°¢À» ÇÏ°Ô µÉ°ÍÀÌ´Ù.
±×·¡¼ À̹øÀå¿¡¼´Â dup ¸¦ ÅëÇÑ °£´ÜÇÑ ¿¹¸¦ µé¾îº¸µµ·Ï ÇÒ°ÍÀÌ´Ù.
¿¹¸¦ ÅëÇØ¼ ±¸ÇöÇϰíÀÚ ÇÏ´Â ³»¿ëÀº ¹Ù·Î ½©ÀÇ ¸®´ÙÀÌ·º¼Ç(ÀçÁöÇâ) ±â´ÉÀÌ´Ù. ¿ì¸®´Â ½©À» »ç¿ëÇÏ¸é¼ ´ÙÀ½°ú °°Àº ÀçÁöÇâ ±â¹ýÀ» ÈçÇÏ°Ô »ç¿ëÇÒ°ÍÀÌ´Ù. [root@localhost test]# cat < test.txt dark rain. ... ... [root@localhost test]#¿©±â¿¡¼ ³ª´À ¸®´ÙÀÌ·º¼Ç ±â´ÉÀ» °¡Áö´Â Å×½ºÆ®¿ë °£ÀÌ ½©À» ¸¸µé °ÍÀÌ´Ù. ÀÌ °£ÀÌ ½©Àº ¸í·ÉÀ» ³»¸±°æ¿ì ÇØ´ç ¸í·ÉÀ» fork&exec ±â¹ýÀ¸·Î ½ÇÇàÇÑ´Ù.
½©À» Á¦´ë·Î ±¸ÇöÇÏ´Â °ÍÀº ³Ê¹« ¸¹Àº ³ë·Â°ú ½Ã°£ÀÌ µå´Â ÀÛ¾÷À̹ǷΠ¿©±â¿¡¼´Â dup ÀÇ È°¿ë¿¡ ÃÐÁ¡À» ¸ÂÃß¾î¼ ´ÜÁö ´ÜÀÏ ¸í·ÉÀ» ½ÇÇàÀÎÀÚ Ã³¸® ¾øÀÌ ½ÇÇà½ÃŰ´Â ±â´É°ú, ÀçÁöÇâ Áß "<", Áï ÆÄÀÏÀ» ÀÐ¾î¼ ¸í·É¾î·Î º¸³»´Â ±â´É¸¸À» °¡Áö´Â °£´ÜÇÑ ½©À» ¸¸µé°ÍÀÌ´Ù.
¿¹Á¦ : dup_sh.cc
#include <unistd.h> #include <stdio.h> #include <signal.h> #include <vector> #include <string> #include <sys/types.h> #include <sys/wait.h> #include <algorithm> #include <fcntl.h> vector<string> makearg(string); int main() { char *buf; vector<string> arg; int pid = 0; int fd; int redirect = 0; // SIGCHLD ½Ã±×³ÎÀ» ¹«½ÃÇÑ´Ù. signal(SIGCHLD, SIG_IGN); buf = (char *)malloc(sizeof(char) *255); while(1) { redirect = 0; memset (buf, 0x00, 255); // »ç¿ëÀÚ ÀԷ´ë±â¿ë ÇÁ·ÒÇÁÆ®¸¦ ¶ç¿î´Ù. write(1, "# ", 3); if (read(0, buf, 255) > 1) { buf[strlen(buf) -1] = 0x00; if (strncmp (buf, "exit", 4) == 0) exit(0); // ¸¸¾à ÀоîµéÀÎ ¹®ÀÚ¿Áß "<" ÀÌ ÀÖ´Ù¸é // ÀçÁöÇâÀ¸·Î ÆÇ´ÜÇϰí makearg ÇÔ¼ö¸¦ È£ÃâÇÏ¿© // ¸í·ÉºÎºÐ°ú ÆÄÀϺκÐÀ» ³ª´«ÈÄ // ÆÄÀÏÀ» open ÇÑ´Ù. if (strstr (buf, "<") != NULL) { arg = makearg(buf); fd = open(arg[1].c_str(), O_RDONLY); if (fd < 0) { fprintf(stderr, "file not found : %s\n", arg[1].c_str()); exit(0); } redirect = 1; strcpy(buf, arg[0].c_str()); } pid = fork(); if (pid == 0) { // ¸¸¾à ÀçÁöÇâÀÌ »ç¿ëµÇ¾ú´Ù¸é // ¿¸° ÆÄÀÏÀ» Ç¥ÁØÀÔ·Â 0 À¸·Î º¹»çÇÑ´Ù. if (redirect) dup2(fd, 0); // ¸í·ÉºÎºÐÀ» execl °è¿ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ // ½ÇÇà½ÃŲ´Ù. execlp(buf, buf, NULL); } else if(pid > 0) { if (redirect) close(fd); wait(0); } } } } // ¹®ÀÚ¿À» "<" ¸¦ ±âÁØÀ¸·Î // ³ª´©°í °ø¹é¹®ÀÚ¸¦ Á¦°ÅÇѵڿ¡ vector ·Î // µÇµ¹·ÁÁØ´Ù. vector<string> makearg(string str) { int num; vector<string> return_str; string::iterator mi; mi = str.begin(); while (mi != str.end()) { if (*mi == ' ') str.erase(mi); *mi++; } num = str.find("<"); return_str.push_back(str.substr(0,num)); return_str.push_back(str.substr(num+1)); return return_str; }À§ÀÇ ÇÁ·Î±×·¥Àº STL À» ÀÌ¿ëÇßÀ½À¸·Î g++ ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇØ¼ ÄÄÆÄÀÏ ÇØ¾ß ÇÑ´Ù. À§ÀÇ ¿¹Á¦´Â ´ÙÀ½°ú °°ÀÌ ½ÇÇà °¡´ÉÇÒ°ÍÀÌ´Ù. [root@s210-205-210-195 dup]# ./dup3
# ls
dump dup1 dup1.c dup2 dup2.c dup3 dup3.c sh sh.c
# tail < dup3.c
if (*mi == ' ')
str.erase(mi);
*mi++;
}
num = str.find("<");
return_str.push_back(str.substr(0,num));
return_str.push_back(str.substr(num+1));
return return_str;
}
|
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|