APUE 책에 IF - ELSE로 구현 된 것을 switch - case로 재구현 한 것. stat 스트럭쳐 의 st_mode 의 내부를 들여다 본 것.

헤더파일과 구현부로 나뉘어 있음.

 
/* Header : myhdr.h */

#include <sys/types.h>
#include <sys/stat.h>
#include "ourhdr.h"

//Defined Values
#define N_IFREG 32768 // 1000 0000 0000 0000
#define N_IFDIR 16384 // 0100 0000 0000 0000   
#define N_IFCHR 8192 // 0010 0000 0000 0000
#define N_IFBLK 24576 // 0110 0000 0000 0000
#define N_IFIFO 4096 // 0001 0000 0000 0000
#define N_IFLNK 40960 // 1010 0000 0000 0000
#define N_IFSOCK 49152 // 1100 0000 0000 0000
#define MASK 61440 // 1111 0000 0000 0000

/* End of myhdr.h */

/* Source : file_mode.c */

#include "myhdr.h"

int main(int argc, char *argv[])
{
    int  i; //for loop
    int   mode ; //mode checker by bits
    struct stat buf;
    char  *ptr;

    for (i = 1; i < argc; i++)
    {
        printf("%s: ", argv[i]);
        if (lstat(argv[i], &buf) < 0)
        {
            err_ret("lstat error");
            continue;
        }

        mode = buf.st_mode & MASK; //Masking

        switch (mode)
        {
            case N_IFREG :
                ptr = "regular";
            break;

            case N_IFDIR :
                ptr = "directory";
            break;

            case N_IFCHR :
                ptr = "character special";
            break;

            case N_IFBLK :
                ptr = "block special";
            break;

            case N_IFIFO :
                ptr = "fifo";
            break;

#ifdef S_IFLNK
            case N_IFLNK :
                ptr = "symbolic link";
            break;
#endif
#ifdef S_IFSOCK
            case N_IFSOCK :
                ptr = "socket";
            break;
#endif
            default :
                ptr = "** unknown mode **";
            break;    
        }//end of switch

        printf("%s\n", ptr);

    }//end of for

    exit(0);
}
/* End of file_mode.c */

'Studies > Advanced Programming in the UNIX Environment' 카테고리의 다른 글

File mode checker  (0) 2008.08.12
myShell  (0) 2008.08.12
myCAT : cat(1)  (0) 2008.08.12
WC : Word Count  (0) 2008.08.10
실행파일 만들기 : Make a .exe file for APUE  (0) 2008.08.10
error.c  (0) 2008.08.10
Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절


BLOG main image
일상, 프로그래밍, IT 그리고 직장생활, Dive, 여행 by 지그프리드

카테고리

Class List (402)
Studies (30)
Exercise & Quizz (10)
Term Project (0)
ECIM list (Help!) (10)
Issues & News (0)
Gossip about IT & Job (22)
Tools (2)
Think about the Justice (23)
Book Review (170)
조엘 온 소프트웨어(번역) (28)
Diary (87)
Vacations (9)
Clash of clans 클래시 오브.. (11)

글 보관함

달력

«   2020/08   »
            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          
Total : 321,747
Today : 4 Yesterday : 10