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


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


연습문제 3.7 입니다.

특정 파일의 권한을 바꾸기 위해 ls스타일로 권한 명령을 내리면 변환해 주는 프로그램입니다.

ls스타일을 이용하기 위해 연습문제 3.3 에서 작성한 코드를 이용하였습니다.

변환 과정은 연습문제 3.3과 거의 같으며 실제 권한 변경을 수행하기 위해 chmod 함수를 이용했습니다.


코드는 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
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
char oc[4= "";
 
int lsoct(char* ls) {
    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) {
            char c[1= {check+48};
            strcat(oc,c);
            check = 0;
        }
    }
    return 0;
}
 
int main(int argc, char* argv[]) {
    if(argc != 3) {
        printf("error : not two factor\n");
        return -1;
    }
    else if(strlen(argv[2]) == 9)
        lsoct(argv[2]);
    else if(strlen(argv[2]) != 4) {
        printf("error : file permission\n");
        return -1;     
    }
    else
        strcpy(oc, argv[2]);
    
    long i = strtol(oc, 08);
    if(chmod(argv[1], i) == -1)
        perror("call to chmod falled\n");
 
    return 0;
    
 
}