[UNIX 시스템 프로그래밍 second Edition - KEITH HAVILAND저] 연습문제 풀이입니다.


(저작권에 저촉 될 우려가 있어 문제 내용은 생략합니다.)


연습문제 2.15 입니다.

먼저 받아오는 인수를 for문을 이용해서 처리합니다.

각각의 인수를 파일 이름으로 보고 open함수를 통해 파일을 open 합니다.

open한 파일은 read 함수로 읽어들이고 write함수로 출력하는 과정을 반복합니다.

만약, 받아오는 인수가 없다면 표준 입력으로 파일 이름을 받아와 출력합니다.


코드는 C++로 작성하였습니다.

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
32
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
 
#define SIZE 512
 
int main(int argc, char* argv[]) {
    ssize_t nread;
    int fd;
    int i;
    char buf[SIZE];
    if(argc > 1) {
        for(i=1; i<argc; i++) {
            if ((fd = open(argv[i], O_RDWR)) == -1) {
                printf("file can not open TT \n");
                return (-1);
            }
            while((nread = read(fd, buf, SIZE)) > 0) {
                write(1,buf,nread);                        
            }
            close(fd);
        }    
    }
    else {
        nread = read(0, buf, SIZE);
        write(1, buf, nread);
    }
    
        exit(0);
}