본문 바로가기

Programming/C/C++

C/Linux 파일 종류 검색

반응형
파일 종류 검색 - 상수를 이용한 파일 종류 검색
  • 파일 종류에 대한 상수

    - st_mode의 16진수 값과 0xF000(=S_IFMT) and 연산하면 파일 종류 부분 만 나타내는 정보를 획득 할 수 있다.

statInfo.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
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
 
int main(void) {
    struct stat buf;
    int kind;
 
    stat("unix.txt"&buf);
 
    printf("Mode = %o (Hexadecimal : %x)\n", (unsigned int)buf.st_mode, (unsigned int)buf.st_mode);
 
    kind = buf.st_mode & S_IFMT;
    printf("Kind = %x\n", kind);
 
    switch(kind) {
        case S_IFIFO:
            printf("unix.txt : FIFO\n");
            break;
        case S_IFDIR:
            printf("unix.txt : Directory\n");
            break;
        case S_IFREG:
            printf("unix.txt : Regular File\n");
            break;
    }
 
    return 0;
}
실행 결과

파일 접근권한 정보 저장
- stat 구조체에서 st_mode 항목에 파일의 종류와 접근권한 정보 저장
- st mode 값의 구조

파일 종류 검색 - 매크로를 이용한 파일 종류 검색
- 매크로 목록
  • 각 매크로는 인자로 받은 mode 값을 0xF000과 AND연산 수행
  • AND 연산의 결과를 파일의 종류별로 정해진 값과 비교하여 파일의 종류 판단
  • 이 매크로는 POSIX 표준

macroInfo.c - 매크로를 이용해 파일 종류 검색
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
 
int main(void) {
    struct stat buf;
 
    stat("unix.txt"&buf);
    printf("Mode =%o (Hexadecimal : %x)\n", (unsigned int)buf.st_mode, (unsigned int)buf.st_mode);
    if(S_ISFIFO(buf.st_mode)) printf("unix.txt : FIFO\n");
    if(S_ISDIR(buf.st_mode)) printf("unix.txt : Directory\n");
    if(S_ISREG(buf.st_mode)) printf("unix.txt : Regualr File\n");
 
    return 0;
}

실행 결과


반응형