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


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


연습문제 3.3 입니다.

문자열로 입력받은 권한을 팔진수 값으로 바꾸기 위해 lsoct 함수를 정의했습니다.

반대로 팔진수 값으로 입력받은 권한을 문자열로 변환하기 위해 octls 함수를 정의했습니다.

변환하는 과정은 코드를 참고하면 쉽게 이해할 수 있을 것이라 생각합니다.


코드는 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <string.h>
 
int lsoct(char* ls) {
    int oc[4= {0};    
    int check = 0;
    for(int i=0; i<=8; i++) {
        switch(ls[i]) {
            case 'r':
                check += 4;
                break;
            case 'w':
                check += 2;                
                break;
            case 'x':
                check += 1;                
                break;
            case '-':
                break;
            default:
                printf("signal error\n");
                return -1;            
        }
        
        if(i%3 == 2) {
            oc[i/3+1]=check;
            check = 0;
        }
    }
    printf("convert complete : %d%d%d%d\n", oc[0], oc[1], oc[2], oc[3]);
    return 0;
}
 
int octls(char* oc) {
    char ls[9= "";
    if(oc[0== '0') {
        for(int i=1; i<=3; i++) {
        switch(oc[i]) {
            case '0':
                strcat(ls,"---");
                break;
            case '1':
                strcat(ls,"--x");
                break;
            case '2':
                strcat(ls,"-w-");
                break;
            case '3':
                strcat(ls,"-wx");
                break;
            case '4':
                strcat(ls,"r--");
                break;
            case '5':
                strcat(ls,"r-x");
                break;
            case '6':
                strcat(ls,"rw-");
                break;
            case '7':
                strcat(ls,"rwx");
                break;
            default:
                printf("number error\n");
                return -1;            
        }
        }
    }
    else {
        printf("this number is not octal number\n");
        return -1;    
    }
    printf("convert complete : %s\n",ls);
    return 0;
}
 
int main(int argc, char* argv[]) {
    if(!strcmp(argv[1],"lsoct"))
        lsoct(argv[2]);
    else if(!strcmp(argv[1],"octls"))
        octls(argv[2]);
    else {
        printf("Don't find you want\n");
        return -1;    
    }
    return 0;
}
 
cs