statfs(2)
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/02/25           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>statfs(2)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    ÆÄÀÏ ½Ã½ºÅÛ Á¤º¸¸¦ °¡Á®¿Â´Ù.  
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#include <sys/vfs.h> 
 
int statfs(const char *path, struct statfs *buf); 
int fstatfs(int fd, struct statfs *buf); 
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        statfs()´Â ¸¶¿îÆ®µÈ ÆÄÀÏ ½Ã½ºÅÛ¿¡ ´ëÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù.  
        <emphasis>path</emphasis>´Â ¸¶¿îÆ®µÈ ÆÄÀÏ ½Ã½ºÅÛ³» ÆÄÀÏÀÇ  
        °æ·Î À̸§ÀÌ´Ù. ÆÄÀÏ ½Ã½ºÅÛÀÇ Á¤º¸´Â <emphasis>buf</emphasis>°¡  
        °¡¸£Å°´Â °ø°£¿¡ ä¿öÁø´Ù. <emphasis>statfs</emphasis>±¸Á¶Ã¼´Â  
        ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù. 
        <screen> 
struct statfs { 
   long    f_type;     /* ÆÄÀÏ ½Ã½ºÅÛ Å¸ÀÔ(¾Æ·¡¿¡¼­ º¸¿©ÁØ´Ù) */ 
   long    f_bsize;    /* ÃÖÀûÈ­µÈ Àü¼Û ºí·° Å©±â */ 
   long    f_blocks;   /* ÆÄÀÏ ½Ã½ºÅÛ³» ÃÑ µ¥ÀÌÅÍ ºí·°µé */ 
   long    f_bfree;    /* ÆÄÀÏ ½Ã½ºÅÛ³» ¿©À¯ ºí·°µé */ 
   long    f_bavail;   /* ºñ-½´ÆÛ À¯Àú¸¦ À§ÇÑ ¿©À¯ ºí·°µé */ 
   long    f_files;    /* ÆÄÀÏ ½Ã½ºÅÛ³» ÃÑ ÆÄÀÏ ³ëµåµé */ 
   long    f_ffree;    /* ÆÄÀÏ ½Ã½ºÅÛ³» ¿©À¯ ÆÄÀÏ ³ëµåµé */ 
   fsid_t  f_fsid;     /* ÆÄÀÏ ½Ã½ºÅÛ ID */ 
   long    f_namelen;  /* ÆÄÀÏ À̸§ÀÇ ÃÖ´ë ±æÀÌ */ 
   long    f_spare[6]; /* ³ªÁßÀ» À§ÇÑ ¿©À¯ºÐ */ 
}; 
        </screen> 
        ´ÙÀ½Àº ÆÄÀÏ ½Ã½ºÅÛ Å¸ÀÔÀÌ´Ù.     
        <screen> 
linux/affs_fs.h: 
   AFFS_SUPER_MAGIC      0xADFF 
linux/ext_fs.h: 
   EXT_SUPER_MAGIC       0x137D 
linux/ext2_fs.h: 
   EXT2_OLD_SUPER_MAGIC  0xEF51 
   EXT2_SUPER_MAGIC      0xEF53 
linux/hpfs_fs.h: 
   HPFS_SUPER_MAGIC      0xF995E849 
linux/iso_fs.h: 
   ISOFS_SUPER_MAGIC     0x9660 
linux/minix_fs.h: 
   MINIX_SUPER_MAGIC     0x137F /* orig. minix */ 
   MINIX_SUPER_MAGIC2    0x138F /* 30 char minix */ 
   MINIX2_SUPER_MAGIC    0x2468 /* minix V2 */ 
   MINIX2_SUPER_MAGIC2   0x2478 /* minix V2, 30 char names */ 
linux/msdos_fs.h: 
   MSDOS_SUPER_MAGIC     0x4d44 
linux/ncp_fs.h: 
   NCP_SUPER_MAGIC       0x564c 
linux/nfs_fs.h: 
   NFS_SUPER_MAGIC       0x6969 
linux/proc_fs.h: 
   PROC_SUPER_MAGIC      0x9fa0 
linux/smb_fs.h: 
   SMB_SUPER_MAGIC       0x517B 
linux/sysv_fs.h: 
   XENIX_SUPER_MAGIC     0x012FF7B4 
   SYSV4_SUPER_MAGIC     0x012FF7B5 
   SYSV2_SUPER_MAGIC     0x012FF7B6 
   COH_SUPER_MAGIC       0x012FF7B7 
linux/ufs_fs.h: 
   UFS_MAGIC             0x00011954 
linux/xia_fs.h: 
   _XIAFS_SUPER_MAGIC    0x012FD16D 
        </screen> 
        Á¤ÀǵÇÁö ¾ÊÀº ÆÄÀϽýºÅÛÀÌ °Ë»öµÇ¾úÀ» °æ¿ì Çʵå´Â -1·Î ¼³Á¤µÈ´Ù.  
    </para> 
    <para> 
        fstatfs()´Â ¿­¸° ÆÄÀÏÁöÁ¤ÀÚ<emphasis>fd</emphasis>¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀ»  
        Á¦¿ÜÇϰí´Â statfs()¿Í µ¿ÀÏÇÏ´Ù. 
    </para> 
</section> 
 
<!-- ÇÔ¼ö°¡ µÇµ¹·ÁÁÖ´Â °ªÀ̱¸¿ä --> 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
        ¼º°ø½Ã 0ÀÌ ¸®Åϵǰí, ¿¡·¯°¡ ¹ß»ýÇϸé -1ÀÌ ¸®ÅϵȴÙ.  
    </para> 
</section> 
 
<!-- ¿¡·¯°¡ ¹ß»ýÇßÀ»¶§ µÇµ¹·ÁÁÖ´Â °ªµéÀÔ´Ï´Ù --> 
<section> 
    <title>¿¡·¯</title> 
    <para> 
        statfs(): 
        <variablelist>     
            <varlistentry> 
            <term>ENOTDIR</term>     
            <listitem> 
                <para>     
                    pathÀÇ °æ·Î ¿ä¼Ò°¡ µð·ºÅ丮°¡ ¾Æ´Ï´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>ENAMETOOLONG</term>     
            <listitem> 
                <para>     
                    <emphasis>path</emphasis>°¡ ³Ê¹« ±æ´Ù.  
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>ENOENT</term>     
            <listitem> 
                <para>     
                    Ž»ö Çã°¡±ÇÀÌ <emphasis>path</emphasis>°æ·Î ¿ä¼Ò¿¡¼­  
                    °ÅºÎµÇ¾ú´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>ELOOP</term>     
            <listitem> 
                <para>     
                    ³Ê¹« ¸¹Àº »ó¡ ¿¬°áÀ»<emphasis>path</emphasis>ÇØ¼®½Ã¿¡  
                    ¸¸³µ´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EFAULT</term>     
            <listitem> 
                <para>     
                    <emphasis>buf</emphasis>³ª<emphasis>path</emphasis>°¡ 
                    À¯È¿ÇÏÁö ¾ÊÀº ÁÖ¼Ò¸¦ °¡¸®Å°°í ÀÖ´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EIO</term>     
            <listitem> 
                <para>     
                    ÆÄÀÏ ½Ã½ºÅÛÀ» Àаųª ¾²´Â µ¿¾È I/O ¿¡·¯°¡ ¹ß»ýÇß´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>ENOMEM</term>     
            <listitem> 
                <para>     
                    ÀÌ¿ëÇÒ ¼ö ÀÖ´Â Ä¿³Î ¸Þ¸ð¸®°¡ ÃæºÐÇÏÁö ¾Ê´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>ENOSYS</term>     
            <listitem> 
                <para>     
                    <emphasis>path</emphasis>ÆÄÀÏ ½Ã½ºÅÛÀÌ statfs¸¦ Áö¿øÇÏÁö 
                    ¾Ê´Â´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
        fstatfs(): 
        <variablelist>     
            <varlistentry> 
            <term>EBADF</term>     
            <listitem> 
                <para>     
                    <emphasis>fd</emphasis>´Â À¯È¿ÇÑ ÆÄÀÏÁöÁ¤ÀÚ°¡ ¾Æ´Ï´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EFAULT</term>     
            <listitem> 
                <para>     
                    <emphasis>buf</emphasis>°¡ À¯È¿ÇÏÁö ¾ÊÀº ÁÖ¼Ò¸¦  
                    °¡¸®Å°°í ÀÖ´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>ENOSYS</term>     
            <listitem> 
                <para>     
                    <emphasis>path</emphasis>ÆÄÀÏ ½Ã½ºÅÛÀÌ statfs¸¦ Áö¿øÇÏÁö 
                    ¾Ê´Â´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EIO</term>     
            <listitem> 
                <para>     
                    ÆÄÀÏ ½Ã½ºÅÛÀ» Àаųª ¾²´Â µ¿¾È I/O ¿¡·¯°¡ ¹ß»ýÇß´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
        <screen> 
/* 
 * ÆÄÀϽýºÅÛ Á¤º¸ ¾ò¾î¿À±â 
 * /proc/mounts Á¤º¸¿Í statfs¸¦ ÀÌ¿ëÇÑ´Ù.  
 */ 
#include <stdio.h> 
#include <string.h> 
#include <libgen.h> 
#include <sys/vfs.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
 
const char *MMOUNT = "/proc/mounts"; 
 
struct f_size 
{ 
    long blocks; 
    long avail;  
}; 
 
typedef struct _mountinfo  
{ 
    FILE *fp;                // ÆÄÀÏ ½ºÆ®¸² Æ÷ÀÎÅÍ     
    char devname[80];        // ÀåÄ¡ À̸§ 
    char mountdir[80];        // ¸¶¿îÆ® µð·ºÅ丮 À̸§ 
    char fstype[12];        // ÆÄÀÏ ½Ã½ºÅÛ Å¸ÀÔ 
    struct f_size size;        // ÆÄÀÏ ½Ã½ºÅÛÀÇ ÃÑÅ©±â/»ç¿ëÀ²  
} MOUNTP; 
 
MOUNTP *dfopen() 
{ 
    MOUNTP *MP; 
 
    // /proc/mounts ÆÄÀÏÀ» ¿¬´Ù. 
    MP = (MOUNTP *)malloc(sizeof(MOUNTP)); 
    if(!(MP->fp = fopen(MMOUNT, "r"))) 
    { 
        return NULL; 
    } 
    else 
        return MP; 
} 
 
MOUNTP *dfget(MOUNTP *MP) 
{ 
    char buf[256]; 
    char *bname; 
    char null[16]; 
    struct statfs lstatfs; 
    struct stat lstat;  
    int is_root = 0; 
 
    // /proc/mounts·Î ºÎÅÍ ¸¶¿îÆ®µÈ ÆÄƼ¼ÇÀÇ Á¤º¸¸¦ ¾ò¾î¿Â´Ù. 
    while(fgets(buf, 255, MP->fp)) 
    { 
        is_root = 0; 
        sscanf(buf, "%s%s%s",MP->devname, MP->mountdir, MP->fstype); 
         if (strcmp(MP->mountdir,"/") == 0) is_root=1; 
        if (stat(MP->devname, &lstat) == 0 || is_root) 
        { 
            if (strstr(buf, MP->mountdir) && S_ISBLK(lstat.st_mode) || is_root) 
            { 
                // ÆÄÀϽýºÅÛÀÇ ÃÑ ÇÒ´çµÈ Å©±â¿Í »ç¿ë·®À» ±¸ÇÑ´Ù.         
                statfs(MP->mountdir, &lstatfs); 
                MP->size.blocks = lstatfs.f_blocks * (lstatfs.f_bsize/1024);  
                MP->size.avail  = lstatfs.f_bavail * (lstatfs.f_bsize/1024);  
                return MP; 
            } 
        } 
    } 
    rewind(MP->fp); 
    return NULL; 
} 
 
int dfclose(MOUNTP *MP) 
{ 
    fclose(MP->fp); 
} 
 
int main() 
{ 
    MOUNTP *MP; 
    if ((MP=dfopen()) == NULL) 
    { 
        perror("error"); 
        return 1; 
    } 
 
    while(1) 
    { 
        while(dfget(MP)) 
        { 
            printf("%-14s%-20s%10lu%10lu\n", MP->mountdir, MP->devname,  
                                MP->size.blocks, 
                                MP->size.avail); 
        } 
        printf("=========================\n\n"); 
        sleep(1); 
    } 
} 
        </screen> 
    </para> 
</section> 
<section> 
    <title>Âü°í¹®Çå</title> 
    <para> 
        <orderedlist> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_sms_ÇÁ·Î±×·¥_Á¦ÀÛ">SMS ÇÁ·Î±×·¥ Á¦ÀÛ</ulink> 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/Code_C_dfget">µð½ºÅ© Á¤º¸ °¡Á®¿À±â</ulink> 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
</section> 
</chapter> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.