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


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


연습문제 2.5입니다.

먼저 open함수를 이용해 파일을 열고, read함수를 이용해 파일을 읽어 들입니다.

이때 read의 BUFSIZE가 1이기 때문에 한 문자씩 읽어오게 됩니다.

이를 통해 구분자를 읽어 오면 단어와 줄의 수를 출력해주기 위해 적절히 처리하고, 문자를 읽어오면 다음 문자를 확인합니다.

이와 같은 과정을 반복하여 파일 내의 모든 문자를 읽어 들인다면 결과를 출력하고 프로그램을 종료합니다.


코드는 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
 
#define BUFSIZE 1
 
int main(int argc, char* argv[]) {
    char* buffer;
    int filedes;
    ssize_t nread;
    long total = 0;
    long line = 0;
    long check = 0;
    if((filedes = open(argv[1], O_RDONLY)) == -1) {
        printf("error in opening file\n");
        exit(1);
    }
    while((nread = read(filedes, buffer, BUFSIZE)) > 0) {
    if(buffer[0== '\t') {
        total++;
        if(check == 1)
            total--;        
        check = 1;
    }
    else if (buffer[0== '\n') {
        total++;
        line++;
        if(check == 1)
            total--;
        check = 1;        
    }
    else if (buffer[0== ' ') {
        total++;
        if(check == 1)
            total--;
        check = 1;
        }
    else
        check = 0;
    }
 
    printf("total chars in file: %ld\nline in file: %ld\n", total, line);
    exit(0);
}