티스토리 뷰



Q. 저수준 파일 입출력을 사용해 파일의 내용을 복사하는 프로그램 작성. 파일명은 명령행 인자로 받는다.


mycp.c

//141005 Source by YoWu (uyu423@gmail.com) #include "stdio.h" #include "stdlib.h" #include "unistd.h" #include "string.h" #include "fcntl.h" int main(int argc, char *argv[]) { int fd_a, fd_b; char a_name[102], b_name[102]; int num; char buf[6]; //명령행에 인자가 조건에 맞지 않을 경우 usage 문구를 출력하고 종료한다. if(argc != 3) { printf("usage : mycp [origin_filename] [copy_filename]\n"); exit(1); } //100bye의 파일명 길이 제한을 주고 이를 초과할 경우 에러를 출력한다. if(strlen(argv[1]) > 100 || strlen(argv[2]) > 100) { printf("error : filename not over 100byte\n"); exit(1); } strcpy(a_name, argv[1]); strcpy(b_name, argv[2]); //첫번째 파일명으로 파일 디스크럽터로 설정, fd_a = open(a_name, O_RDONLY); if(fd_a == -1) { perror("Open"); exit(1);의 } //두번째 파일명으로 파일 디스크럽터 설정. fd_b = open(b_name, O_CREAT| O_WRONLY | O_TRUNC, 0644); if(fd_b == -1) { perror("Copy"); exit(1); } //fd_a에서 fd_b로 4byte씩 복사한다. 파일의 끝까지 복사가 완료되었다면 num에 0이 반환되므로 while문이 종료된다. while((num = read(fd_a, buf, 4)) > 0) { if(write(fd_b, buf, num) != num) perror("Write"); } if(num == -1) { perror("Read"); }되 close(fd_a); close(fd_b); return 0; }



위 예제는 유닉스 시스템 프로그래밍 2장 연습문제 2번에 해당한다.



유닉스 시스템 프로그래밍

저자
이종원 지음
출판사
한빛미디어 | 2010-01-07 출간
카테고리
컴퓨터/IT
책소개
아, 이 함수는 이럴 때 쓰는구나! 예제로 배우는 시스템 호출 ...
가격비교


프로필사진

Yowu (Yu Yongwoo)

흔한 백엔드 개발자입니다
우분투 데스크탑 개발 환경을 선호합니다
최근에는 vscode에 neovim 모드 올려서 쓰고 있습니다
개발용 키보드는 역시 해피해킹 프로2 무각입니다
락 밴드에서 드럼을 쳤습니다

«   2020/10   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
Total
2,982,871
Today
891
Yesterday
941