둘둘리둘둘리둘둘리둘둘리둘둘리둘

파일 속성 획득 본문

Linux/Programming

파일 속성 획득

dool2ly 2016. 7. 3. 18:29

@ 함수 stat


stat(2)

#include <sys/types.h>

#include <sys/stat.h>

#include <unistd.h>


       int stat(const char *file_name, struct stat *buf);

       int fstat(int filedes, struct stat *buf);

       int lstat(const char *file_name, struct stat *buf);


  지정된 파일 정보를 stat 구조체에 반환, 정보를 얻기 위해 필요한 접근 권한은 필요없지만, 파일을 읽는 경로의 모든 디렉토리에 대한 탐색 권한이 필요.


링크 파일은 그 자체의 정보가 반환 됨, 링크에 포함된 파일을 설명하지 않음.

stat과 lstat은 동일시 된다.

fstat은 File descriptor에 지정된 열린 파일만 가능.



@ stat 구조체


             struct stat

              {

                  dev_t               st_dev;      /* device */

                  ino_t                st_ino;      /* inode */

                  mode_t            st_mode;     /* protection */

                  nlink_t             st_nlink;    /* number of hard links */

                  uid_t                st_uid;      /* user ID of owner */

                  gid_t                st_gid;      /* group ID of owner */

                  dev_t               st_rdev;     /* device type (if inode device) */

                  off_t                st_size;     /* total size, in bytes */

                  unsigned long    st_blksize;  /* blocksize for filesystem I/O */

                  unsigned long    st_blocks;   /* number of blocks allocated */

                  time_t                st_atime;    /* time of last access */

                  time_t                st_mtime;    /* time of last modification */

                  time_t                st_ctime;    /* time of last change */

              };



@ 파일 타입 확인 매크로


       The following POSIX macros are defined to check the file type using  the  st_mode

       field:


             S_ISLNK(m)  is it a symbolic link?


              S_ISREG(m)  regular file?


              S_ISDIR(m)  directory?


              S_ISCHR(m)  character device?


              S_ISBLK(m)  block device?


              S_ISFIFO(m) fifo?


              S_ISSOCK(m) socket?



@ 사용 예제

  1 #include <stdio.h>

  2 #include <sys/types.h>

  3 #include <sys/stat.h>

  4 #include <unistd.h>

  5

  6

  7 int main(){

  8     struct stat st;

  9     int res;

 10

 11     res = stat("./test",&st);

 12

 13     if( res == -1 )

 14     {

 15             perror("stat");

 16             return 0;

 17     }

 18

 19     if( S_ISDIR(st.st_mode) )

 20     {

 21             printf("this file is directory.\n");

 22     }else{

 23             printf("this file is not directory.\n");

 24     }

 25

 26     return 0;

 27 }



'Linux > Programming' 카테고리의 다른 글

IPC(Inter Process Communication)  (0) 2016.07.09
Thread  (0) 2016.07.08
Signal  (0) 2016.07.05
유저 정보 획득  (0) 2016.07.03
man page 사용법  (0) 2016.07.02
Comments