homework 01_01

file copy 프로그램 구현

과제 개요

2개의 file 이름을 명령 인수로 받아서 첫번째 파일로부터 두번재 파일로 복사하는 프로그램을 POSIX API와 Windows API를 이용하여 작성하시오.
첫번째 파일이 없거나, 두번째 파일이 이미 존재할 경우 적절한 메시지를 출력하고 실행을 중지하시오.

1. POSIX API


    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <fcntl.h>

    int main(int argc, char* argv[]){

        char buf[2048];
        int fd_in, fd_out;
        ssize_t bytes_read, bytes_write;
        //wrong input
        if(argc != 3){
            printf("error! \nwrite cp filename1 filename2\n");
            return 1;
        }
        //input file
        fd_in = open(argv[1],O_RDONLY);
        if(fd_in == -1){
            perror("open error\n");
            return 2;
        }
        //create output file
        fd_out = open(argv[2],O_WRONLY | O_CREAT | O_EXCL, 0644);
    //chomd 0644, enable to write,read   O_EXCL 인자는 O_CREAT와 함께 쓰이면 중복검사 기능을 수행한다.
        if(fd_out == -1){
            perror("copy failed! check existing filename\n");
            return 3;
        }
        //copy process
        while((bytes_read = read(fd_in,&buf,2048)) > 0 ){ // argv[1]'s file bytes
            bytes_write = write(fd_out,&buf,(ssize_t)bytes_read);
            if(bytes_write != bytes_read){
                perror("write error\n");
                return 4;
            }
        }

        close(fd_in);
        close(fd_out);
        return 0;
    }
  

   

헤더 파일 #include <sys/stat.h> 파일 정보 (통계분석) 등.
#include <sys/types.h> 어떤 곳에서든지 사용되는 다양한 데이터 유형.
#include <unistd.h> 다양한 필수 POSIX 함수와 상수.
main(int argc , char* argv[]) argc : arguments count로서 main 함수에 전달된 인자의 갯수 argv : arguments vector로서 가변 문자열 , 첫번째 문자열은 프로그램의 실행경로로 항상 고정 -------------------------POSIX API---------------------- open() #include < sys / stat.h > #include < fcntl.h > int open (const char * path , int oflag , ...); oflag : O_RDONLY 읽기 전용으로 엽니 다. O_WRONLY 쓰기 전용으로 엽니 다. O_RDWR 읽기 및 쓰기 용으로 엽니 다. 이 플래그가 FIFO에 적용되면 결과는 정의되지 않습니다. -----------------------명령어순서--------------------- gcc -Wall -o [출력파일명] [컴파일파일명] ./[출력파일명] srcFile dstFile 복사 완료!


https://ddiri01.tistory.com/76
http://neosrtos.com/docs/posix_api/sysstat.html
http://neosrtos.com/docs/posix_api/unistd.html
http://theeye.pe.kr/archives/938
http://linux.die.net/man/3/read
http://www.techytalk.info/linux-system-programming-open-file-read-file-and-write-file/

© 2018. All rights reserved.

Powered by Hydejack v8.4.0