file °ü·Ã Á¤º¸ ¾ò¾î¿À±â
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>FileInfo



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

ÆÄÀÏÀÇ Á¾·ù

Unix ¿¡¼­´Â µð·ºÅ丮, ÀåÄ¡, ¼ÒÄÏ, FIFO µî ¸ðµç°ÍÀÌ ÆÄÀÏ·Î Á¸ÀçÇÑ´Ù. ±×·¯¹Ç·Î
¿ì¼± ¿ì¸®´Â ÀÛ¾÷À» ÇϰíÀÚ ÇÏ´Â ÆÄÀÏÀÌ ¾î´ø Á¾·ùÀÇ ÆÄÀÏÀÎÁö¸¦ ¸ÕÀú ÆÇ´ÜÇÒ¼ö
ÀÖ¾î¾ß ÇÑ´Ù. Unix »ó¿¡¼­ "ls -al" À» ÀÌ¿ëÇÏ¸é ¾Æ·¡¿Í °°Àº °á°ú¹°À» º¼¼ö
ÀÖÀ»°ÍÀÌ´Ù.
[yundream@localhost test]# ls -al 
... 
-rw-r--r--    1 root     root          249  9¿ù 10 11:25 wc.1 
drwxr-xr-x    2 root     root         4096 12¿ù  5 18:01 web_install 
srwxr-xr-x    1 root     root            0  1¿ù 14 18:05 loging_socket 
... 
 

À§ÀÇ °á°ú¿¡¼­ °¡Àå ¾ÕºÎºÐ 10ÀÚ¸®°¡ ±× ÆÄÀÏÀÇ Æ¯¼º°ú ±ÇÇÑÀ» ³ªÅ¸³»´Âµ¥, ±×Áß
Á¦ÀÏ ¾ÕºÎºÐÀÌ ÆÄÀÏÀÇ Á¾·ù¸¦ ³ªÅ¸³»°í, ¿ì¸®´Â °¡Àå ¾ÕºÎºÐÀÇ ÇѹÙÀÌÆ®ÀÇ ¹®ÀÚ¸¦
ÀÌ¿ëÇØ¼­ ¾î¶² Á¾·ùÀÇ ÆÄÀÏÀÎÁö¸¦ ¾Ë¾Æ³¾¼ö ÀÖ´Ù.<br>
Unix ¿¡¼­ ÀÚÁÖ »ç¿ëÇÏ´Â ÆÄÀÏÀÇ Á¾·ù¸¦ ¾Æ·¡ Å×ÀÌºí¿¡ Á¤¸®ÇØ µÎ¾úÀ¸´Ï Âü°í
¹Ù¶õ´Ù.
- ÀÏ¹Ý ÆÄÀÏ
s ¼ÒÄÏÆÄÀÏ
d µð·ºÅ丮
p FIFO
l ½Éº¼¸µ ¸µÅ©µÈ ÆÄÀÏ
b ºí·° µð¹ÙÀ̽º
c ij¸¯ÅÍ µð¹ÙÀ̽º

ÆÄÀÏ Á¤º¸ °¡Á®¿À±â

ÆÄÀÏÀÇ Á¤º¸´Â stat(2)¸¦ ÅëÇØ¼­ °¡Áö°í ¿À¸ç, °¡Áö°í¿Â Á¤º¸´Â
struct stat ±¸Á¶Ã¼¿¡ ÀúÀåµÈ´Ù. 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 */ 
}; 
 

À§ÀÇ ±¸Á¶Ã¼ÀÇ Á¤º¸´Â inode Å×À̺íÀ» ÂüÁ¶Çؼ­ °¡Áö°í¿À¸ç, ¿ì¸®°¡ ÇÊ¿ä·Î
ÇÏ´Â(±× ÀÌ»óÀÇ) »ó¼¼ÇÑ Á¤º¸¸¦ °¡Á®¿Â´Ù´Â °ÍÀ» ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù. inode
Å×ÀÌºí¿¡ ´ëÇÑ ³»¿ëÀ» ¿øÇÑ´Ù¸é /usr/src/linux/include/fs.h ÀÇ sturct inode
¸¦ ÂüÁ¶ÇÏ¸é µÈ´Ù.

±×·³ °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À» ¸¸µé¾î º¸°Ú´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¾Æ±Ô¸ÕÆ®·Î ÆÄÀÏÀ̸§À»
¹Þ¾Æ¼­ ±× ÆÄÀÏÀÇ Á¤º¸¸¦ µÇµ¹·ÁÁÖ´Â ÇÁ·Î±×·¥À¸·Î,
ÆÄÀÏÀÇ ±ÇÇÑ, ÆÛ¹Ì¼Ç, ÆÄÀÏÀÇ Å©±â, ¸¶Áö¸·¿¡ ¼öÁ¤µÈ ³¯Â¥, ÆÄÀÏÀÇ Á¾·ù µîÀ»
µÇµ¹·ÁÁÙ°ÍÀ̸ç, Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀÇ °æ¿ì ÀûÀýÇÑ ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·ÂÇϰí
Á¾·áÇÏ°Ô µÉ°ÍÀÌ´Ù. <br>
ÀÌ ¿¹Á¦ÀÇ À̸§Àº file_info ·Î ÇϰڴÙ. <br><br>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>

int main(int argc, char **argv)
{
    int return_stat;
    char *file_name; 
    struct stat file_info; 

    struct passwd *my_passwd;
    struct group  *my_group;

    mode_t file_mode;
 
    if (argc != 2 )
    {
        printf("Usage : ./file_info [file name]\n");
        exit(0); 
    }
    file_name = argv[1]; 
    
    if ((return_stat = stat(file_name, &file_info)) == -1)
    {
        perror("Error : ");
        exit(0);
    }

    file_mode = file_info.st_mode;
    printf("ÆÄÀÏÀ̸§ : %s\n", file_name);
    printf("=======================================\n");
    printf("ÆÄÀÏ Å¸ÀÔ : \n"); 
    if (S_ISREG(file_mode))
    { 
        printf("Á¤±ÔÆÄÀÏ\n");
    }
    else if (S_ISLNK(file_mode))  
    {  
        printf("½Éº¼¸¯ ¸µÅ©\n");
    } 
    else if (S_ISDIR(file_mode))
    {
        printf("µð·ºÅ丮\n");
    }
    else if (S_ISCHR(file_mode))
    { 
        printf("¹®ÀÚ µð¹ÙÀ̽º\n");
    }
    else if (S_ISBLK(file_mode))
    {
        printf("ºí·° µð¹ÙÀ̽º\n");
    }
    else if (S_ISFIFO(file_mode))
    {
        printf("FIFO\n");
    }
    else if (S_ISSOCK(file_mode))
    {
        printf("¼ÒÄÏ\n");
    }

    my_passwd = getpwuid(file_info.st_uid);
    my_group  = getgrgid(file_info.st_gid);
    printf("OWNER : %s\n", my_passwd->pw_name);
    printf("GROUP : %s\n", my_group->gr_name);
    printf("FILE SIZE IS : %d\n", file_info.st_size);
    printf("¸¶Áö¸· ÀÐÀº ½Ã°£ : %d\n", file_info.st_atime);
    printf("¸¶Áö¸· ¼öÁ¤ ½Ã°£ : %d\n", file_info.st_mtime);
    printf("Çϵ帵ũµÈ ÆÄÀϼö : %d\n", file_info.st_nlink);
}
¿Ïº®ÇÏÁø ¾ÊÁö¸¸ ±×·°Àú·° ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.

ÇÁ·Î±×·¥Àº ¾Æ¸¶ ¼³¸íÀÌ ÇÊ¿ä ¾øÀ» Á¤µµ·Î °£´ÜÇÒ°ÍÀÌ´Ù. ´ÜÁö ¸¶Áö¸·ÀÇ
file_info.st_nlink (Çϵ帵ũ) ºÎºÐÀÌ ¾à°£ Çò°¥¸± °ÍÀÌ´Ù. Çϵ帵ũ¶õ
º¸Åë C ÀÇ link(2) ÇÔ¼ö¿Í ½© ÄÚ¸àµåÀÎ link ¿¡ -d ¿É¼ÇÀ» ÁÜÀ¸·Î¼­ ¸¸µé¾î
Áø´Ù. cp ¸¦ ÀÌ¿ëÇÑ º¹»ç¿Í Çϵ帵ũ¸¦ È¥µ¿ÇÏÁö ¸»¶ó, cp ¸¦ ÀÌ¿ëÇÑ
º¹»ç´Â ÀڽŸ¸ÀÇ inode ¸¦ °¡Áö´Â ÀüÇô »õ·Î¿î ÆÄÀÏÀ» ¸¸µéÁö¸¸, Çϵ帵ũÀÇ
°æ¿ì µ¿ÀÏÇÑ inode ¸¦ °¡Áö°í ÆÄÀÏÀ̸§À» ¸¸µç´Ù. Çϵ帵ũ´Â inode ¸¦ °¡Áö°í
ÆÄÀÏÀ̸§À» ¸¸µé¹Ç·Î ¼­·Î ´Ù¸¥ ÆÄÀϽýºÅÛ »çÀÌ·Î ¿¬°áÇÒ¼ö´Â ¾ø´Ù.<br>
±× ÀÌÀ¯´Â
inode °¡ ÇØ´ç ÆÄÀϽýºÅÛ¿¡¼­¸¸ À¯ÀÏÇϱ⠶§¹®À¸·Î ¿©·¯°³ÀÇ ÆÄÀϽýºÅÛÀ»
»ç¿ëÇÒ°æ¿ì ´Ù¸¥ ÂÊ ÆÄÀϽýºÅÛ¿¡¼­ ±× inode °¡ À¯ÀÏÇÔÀ» º¸ÀåÇÒ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

stat ´Â ³Ê¹« º¹ÀâÇÕ´Ï´Ù. ´õ °£´ÜÇÑ ÇÔ¼ö´Â ¾øÀ»±î¿ä?

¿ì¸®°¡ ¾î¶² ÇÁ·Î±×·¥À» ¸¸µé¶§, ¿ì¸®´Â Á¾Á¾ ±× ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â
ÆÄÀÏ(¼³Á¤ÆÄÀÏ, µ¥ÀÌŸ ÆÄÀÏ)µéÀÌ Á¸ÀçÇÏ´ÂÁö µîÀ» °Ë»çÇÒ Çʿ䰡 ÀÖ´Ù. À̶§¿¡µµ
À§ÀÇ stat ¸¦ ÀÌ¿ëÇØ¼­ ÇØ°á ÇÒ¼ö ÀÖÁö¸¸, ¿ØÁö º¹ÀâÇÏ´Ù´Â »ý°¢À̵ç´Ù. <br>
À̶§´Â access(2) ¸¦ »ç¿ëÇϸéµÈ´Ù.

access ´Â °Ë»çÇÒ ÆÄÀÏ¿¡ ´ëÇÏ¿© 4°¡Áö Ç׸ñ, ÀÐÀ»¼ö ÀÖ´ÂÁö(R_OK),
¾µ¼ö ÀÖ´ÂÁö (W_OK), ½ÇÇà°¡´É ÇÑÁö (X_OK), Á¸ÀçÇÏ´Â ÆÄÀÏÀÎÁö(F_OK) µî¿¡
´ëÇÑ Á¤º¸¸¦ µ¹·ÁÁØ´Ù.
#include 
#include 
    
int main(int argc, char **argv)
{   
    if (access(argv[1], F_OK) != 0)
        perror("ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½ : ");
    else
        printf("ÆÄÀÏ Á¸ÀçÇÔ\n");
}
    

[yundream@localhost test]# gcc -o access access.  
ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½ : : No such file or directory 
 

ÆÄÀÏ Á¤º¸ º¯°æÇϱâ

ÆÄÀÏ Á¤º¸ µéÀ» º¸¸é ½Ã°£°ú °ü·ÃµÈ Á¤º¸µéÀÌ ÀÖ´Ù. ÆÄÀÏ¿¡ ´ëÇÑ Á¢±Ù, ¼öÁ¤ ½Ã°£ÀÌ À̵éÀε¥, utime(2)À» ÀÌ¿ëÇØ¼­ º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ÇÔ¼ö¸µÅ©¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.