티스토리 뷰

반응형



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)

흔한 Node.js/Java 백엔드 개발자입니다
Ubuntu와 MacOS 데스크탑 개발 환경을 선호합니다
최근에는 vscode와 IntelliJ를 사용하고 있습니다
vscode에는 neovim, IntelliJ는 ideaVim
개발용 키보드는 역시 HHKB Pro 2 무각입니다
락 밴드에서 드럼을 쳤습니다

댓글쓰기 폼
«   2021/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
3,243,325
Today
51
Yesterday
326