ÆÄÀϺ¹»ç ÇÔ¼ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

¼³¸í

À¯´Ð½º Ç¥ÁØÇÔ¼ö¿¡´Â ÆÄÀÏÀ» º¹»çÇÔ¼ö¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. link(2)¸¦ ÅëÇØ¼­ Çϵ帵ũ¸¦ ¸¸µé ¼ö ÀÖÁö¸¸ ÆÄÀÏ º¹»ç¿Í´Â ¾ö¿¬È÷ Ʋ¸®¸ç Çϵ帵ũÀÎ °ü°è·Î ³×Æ®¿öÅ© ÆÄÀÏ ½Ã½ºÅÛÀ̳ª ´Ù¸¥ ÀåÄ¡»çÀÌ¿¡¼­´Â ÀÌ¿ëÇÒ ¼ö°¡ ¾ø´Ù.

ÆÄÀÏ º¹»ç ÇÔ¼ö´Â ´ÜÁö open(2), read(2), write(2)¸¸ ÀÖÀ½ µÉ°Í °°Áö¸¸.. ±ÇÇÑ, ¼ÒÀ¯ÀÚµîÀ» ÀÏÄ¡½ÃÄÑÁà¾ß Çϱ⠶§¹®¿¡ ºÎ°¡ÀûÀÎ ¸î °¡Áö ½Ã½ºÅÛ ÇÔ¼öµéÀÌ Ãß°¡µÈ´Ù.

»ç¿ë¹æ¹ý

int copy(const char *src, const char *dst); 
 
  1. src : ¿øº» ÆÄÀÏ
  2. dst : ¸ñÀû ÆÄÀÏ

int main() 
{ 
    if ((copy("test.c", "test2.c") < 0) 
    { 
        exit(1); 
    } 
    exit(0); 
} 
 

ÄÚµå

#include <unistd.h> 
#include <fcntl.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <stdio.h> 
#include <termios.h> 
 
// yes/no¸¦ ¹°¾îº»´Ù. 
// ºñÁ¤±Ô¸ðµå(NONE ICANON)¸ðµå·Î Å͹̳Π¼³Á¤À» º¯°æÇؼ­  
// °³Ç๮ÀÚÀÇ ÀԷ¾øÀÌ ¹Ù·Î °á°ú°¡ Àû¿ëµÇµµ·Ï Çß´Ù.   
int yorno(char *prompt) 
{ 
    struct termios old_set, new_set; 
    int loop = 1; 
    char in; 
    int retval; 
    tcgetattr(0, &old_set); 
    new_set = old_set; 
    new_set.c_lflag &= (~ICANON); 
    tcsetattr(0, TCSANOW, &new_set); 
 
    while(loop) 
    { 
        printf("\n%s", prompt); 
        in = getc(stdin); 
        switch(in) 
        { 
            case 'y': 
            case 'Y': 
                retval = 1; 
                loop = 0; 
                break; 
            case 'n': 
            case 'N': 
                retval = 0; 
                loop = 0; 
                break; 
            default: 
                break; 
        } 
    } 
    tcsetattr(0, TCSANOW, &old_set); 
    printf("\n"); 
    return retval; 
} 
 
int copy(const char *src, const char *dst) 
{ 
    int src_fd, dst_fd; 
    struct stat srcstat; 
    char in; 
    int n; 
    char buf[1024] = {0x00,}; 
    if ((src_fd = open(src, O_RDONLY)) <0 ) 
    { 
        fprintf(stdout, "Can not open src file : %s\n", src); 
        return -1; 
    } 
 
    // ¿øº»ÆÄÀÏÀÇ mode¸¦ Àоî¿Â´Ù. 
    // ³ªÁß¿¡ »ý¼ºµÉ ÆÄÀÏÀÇ mode¿Í ±ÇÇѺ¯°æ¿¡ »ç¿ëµÈ´Ù.  
    fstat(src_fd, &srcstat); 
 
    // ¸¸¾à ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù¸é 
    // µ¤¾î¾µ°ÇÁö ¹°¾îº»´Ù. 
    if (access(dst, F_OK) == 0) 
    { 
        if (!yorno("Overwrite file ? ")) 
        { 
            exit(0); 
        } 
    } 
 
    // ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.  
    if ((dst_fd = open(dst, O_WRONLY|O_CREAT, srcstat.st_mode)) <0 ) 
    { 
        fprintf(stdout, "Can not open dst file : %s\n", dst); 
        close(src_fd); 
        return -1; 
    } 
    // ³»¿ëÀ» º¹»çÇÑ´Ù.  
    while((n = read(src_fd, buf, 1024)) > 0) 
    { 
        write(dst_fd, buf, n); 
    } 
 
    // ÆÄÀÏÀÇ ¼ÒÀ¯ ±ÇÇÑÀ» º¯°æÇÑ´Ù. 
    fchown(dst_fd, srcstat.st_uid, srcstat.st_gid); 
    close(src_fd); 
    close(dst_fd); 
 
    return 0; 
} 
 

º¯°æ»çÇ×

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