dup¸¦ ÀÌ¿ëÇÑ ÆÄÀÏÁöÁ¤¹øÈ£ º¹»ç
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

Contents

1 dup Ȱ¿ë
1.1 dup¿¡ ´ëÇá¿©
1.2 dupÀ» ÀÌ¿ëÇÑ ÀçÁöÇâ ±¸Çö

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; 
} 
 

Å×½ºÆ® °á°ú °£´ÜÇÑ ¸í·É ½ÇÇà°ú, ÀçÁöÇâ ±â´ÉÀÌ ÀÛµ¿ÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ½Ã°£ÀÌ ³²´Â ´Ù¸é À§ÀÇ Äڵ带 ¾à°£ ¼öÁ¤Çؼ­ ¸í·É½ÇÇà°á°ú¸¦ (Ç¥ÁØÃâ·Â)À» ÆÄÀÏ·Î ÀçÁöÇâ Çϵµ·Ï ÇØº¸±â ¹Ù¶õ´Ù.

category_system
programing
category__4
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.