본문 바로가기

Programming/C/C++

C/Linux 파일 접근 권한 검색

반응형
파일 접근 권한 검색 - 상수를 이용한 파일 접근 권한 검색
- 접근 권한 상수 목록 (운영체제에서 제공)
  • 소유자의 접근권한 추출과 관련된 상수만 정의
  • 소유자 외 그룹과 기타사용자의 접근권한은?
    • shift 연산자를 이용하여 오른쪽으로 3비트,6비트 이동시켜서 AND 연산을 수행한다.
    • st_mode & (S_IREAD >> 3)

- POSIX에서 정의한 접근권한 검색 관련 상수 목록

statAccess.c - 상수를 이용해 파일 접근 권한 검색
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
 
int main(void) {
    struct stat buf;
 
    stat("unix.txt"&buf);
    printf("Mode = %o (Hexdeacimal : %x)\n", (unsigned int)buf.st_mode, (unsigned int)buf.st_mode);
 
    if((buf.st_mode & S_IREAD) != 0)
        printf("unix.txt : user has a read permission\n");
    if((buf.st_mode & (S_IREAD >> 3 )) != 0)
        printf("unix.txt : group has a read permission\n");
    if ((buf.st_mode & S_IROTH) != 0 )
        printf("unix.txt : other have a read permission\n");
 
    return 0;
}

실행 결과

파일 접근 권한 검색 - 함수를 사용하여 파일 접근 권한 검색 access(2)
  • path에 지정된 파일이 amode로 지정한 권한을 가졌는지 확인하고 리턴
  • 접근 권한이 있으면 0을, 오류가 있으면 -1을 리턴
  • 오류 메시지
    • ENOENT : 파일이 없음
    • EACCESS : 접근 권한이 없음
  • amode 값
    • R_OK : 읽기 권한 확인
    • W_OK : 쓰기 권한 확인
    • X_OK : 실행 권한 확인
    • F_OK : 파일이 존재하는 지 확인

access 함수를 이용해 접근 권한 검색
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <sys/errno.h>
#include <unistd.h>
#include <stdio.h>
 
extern int errno;
 
int main(void) {
    int per;
 
    if (access("unix.bak", F_OK) == -1 && errno == ENOENT)
        printf("unix.bak : File not exist.\n");
    
    per = access("unix.txt", R_OK);
    if (per == 0)
        printf("uinx.txit : Read permission is permitted. \n");
    else if (per == -1 && errno == EACCES)
        printf("uinx.txt : Read permission is not permitted. \n");
        
    return 0;
}

실행 결과
  • access는 accessInfo의 실행 권한으로 권한을 확인한다.



반응형

'Programming > C/C++' 카테고리의 다른 글

C/Linux/링크 파일 생성  (0) 2017.11.09
C/Linux/파일 접근권한 변경  (0) 2017.11.09
C/Linux 파일 종류 검색  (0) 2017.11.02
C/Linux 파일 정보 검색  (0) 2017.11.02
C/고수준 파일 입출력/임시 파일 생성  (0) 2017.10.26