티스토리 뷰
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번에 해당한다.
'컴퓨터공학' 카테고리의 다른 글
스택(Stack) 활용 미로 길찾기 프로그램 (C lang) (1) | 2015.04.14 |
---|---|
[문제해결기법] 05. 고장난 카운터 (0) | 2014.10.28 |
[UNIX / LINUX] fread, fwrite 함수 원형, 예제 (0) | 2014.10.05 |
시스템 호출(System Call)과 라이브러리 함수(Library Function) 차이 (0) | 2014.09.24 |
getopt() 함수 예제 (0) | 2014.09.24 |
[알고리즘 연습문제] Letter Bank (0) | 2014.09.22 |
재귀함수(Recursion)에 익숙해지려면... (1) | 2014.09.19 |