http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=2680 [º¹»ç]
ÄÄÆÄÀÏÀº µÇ´Âµ¥
µ¿ÀÛÀ» ¾ÈÇϳ׿ä..
À̸®Àú¸® ÂüÁ¶ÇÏ¸é¼ ¸¸µé¾îº»°Çµ¥
µ¿ÀÛÀ» ¾ÈÇؼ¿ä ^^
µµ¿òÁ» ºÎŹµå¸³´Ï´Ù
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#define PERM 0644
#define BS 512
void f_err(int erno) //ÆÄÀÏÀ» µ¤À» °æ¿ì ±âÁ¸ ÆÄÀÏ¿¡ ´ëÇÑ °ËÁõ
{
switch(erno)
{
case ENOENT : printf("ÇØ´ç ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.\n"); exit(0);
case EACCES : printf("Á¢±ÙÀÌ Çã¿ëµÈ ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù.\n"); exit(0);
case EROFS : printf("ÀбâÀü¿ë ÆÄÀÏÀÔ´Ï´Ù.\n"); exit(0);
default : printf("¾Ë¼ö ¾ø´Â ¿À·ùÀÔ´Ï´Ù.\n"); break;
}
}
void fileexception(int argcn, char *arg1, char *arg2) //¿¹¿Üó¸® ÇÔ¼ö
{
if(argcn < 4) { printf("´ë»óÆÄÀÏÀÌ ÀԷµÇÁö ¾Ê¾Ò½À´Ï´Ù.\n"); exit(0); }
if(access(arg1,F_OK) != 0) { printf("¿øº» ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.\n"); exit(0); }
if(strcmp(arg1,arg2) == 0) { printf("¿øº»°ú ´ë»óÀÌ °°½À´Ï´Ù.\n"); exit(0); }
}
int copyFile(char *in_f, char *out_f) //ÆÄÀÏ º¹»ç ÇÔ¼ö
{
int infile, outfile;
int read_o;
char buf[BS];
if ( ( infile = open ( in_f, O_RDONLY) ) == -1 )
return -1;
if ( ( outfile = open ( out_f, O_WRONLY | O_CREAT | O_TRUNC, PERM) ) == -1 )
{
close (infile);
return -2;
}
while ( (infile = read(infile,buf,BS) ) > 0)
{
if ( write(outfile, buf, read_o) < read_o)
{
close(infile);
close(outfile);
return -3; // ¾²±â¿À·ù
}
}
close(infile);
close(outfile);
if ( read_o == -1)
return -4; // ¸¶Áö¸· Àб⿡¼ ¿À·ù
else
return 0;
}
int appendFile(char *in_f, char *out_f) //ÆÄÀÏ º¹»ç ÇÔ¼ö(append)
{
int infile, outfile;
int read_o;
char buf[BS];
if ( ( infile = open ( in_f, O_RDONLY) ) == -1 )
return -1;
if ( ( outfile = open ( out_f, O_WRONLY | O_APPEND, PERM) ) == -1 )
{
close (infile);
return -2;
}
while ( (infile = read(infile,buf,BS) ) > 0)
{
if ( write(outfile, buf, read_o) < read_o)
{
close(infile);
close(outfile);
return -3; // ¾²±â¿À·ù
}
}
close(infile);
close(outfile);
if ( read_o == -1)
return -4; // ¸¶Áö¸· Àб⿡¼ ¿À·ù
else
return 0;
}
///////////////* main ½ÃÀÛ *///////////////////
void main ( int argc, char* argv[] )
{
char op1 = 'x';
char op2 = 'x';
if ( (op1 = getopt(argc, argv, "if") ) != -1 )
{
switch (op1)
{
case 'f' :
fileexception(argc, argv[2], argv[3]);
copyFile(argv[2],argv[3]); break;
case '?' :
printf("¾Ë¼ö¾ø´Â ¿É¼ÇÀÔ´Ï´Ù."); break;
if (access(argv[3],F_OK) == 0)
{
while( op2 == 'y' || op2 == 'n'|| op2 == 'a')
{
printf("´ë»ó ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù. µ¤¾î¾²½Ã·Á¸é y, Ãß°¡ÇϽ÷Á¸é a Ãë¼Ò´Â nÀ» ´©¸£¼¼¿ä :");
op2 = getchar();
switch (op2)
{
case 'y' : copyFile(argv[2] , argv[3]); break;
case 'a' : appendFile(argv[2], argv[3]); break;
case 'n' : exit(0);
default : printf("À߸øÀÔ·Â\n");
}
}
default : printf("À߸øÀÔ·Â\n");
}
}
}
}
|
Hit : 6052 Date : 2010/09/16 03:39
|