linux man page : statfs - ÆÄÀϽýºÅÛ Á¤º¸¸¦ °¡Á®¿Â´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



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

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=statfs">statfs</a>(2)

1장. statfs(2)

차례
1.1절. »ç¿ë¹ý
1.2절. ¼³¸í
1.3절. ¹Ýȯ°ª
1.4절. ¿¡·¯
1.5절. ¿¹Á¦
1.6절. Âü°í¹®Çå

ÆÄÀÏ ½Ã½ºÅÛ Á¤º¸¸¦ °¡Á®¿Â´Ù.


1.1절. »ç¿ë¹ý

#include <sys/vfs.h>

int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
		


1.2절. ¼³¸í

statfs()´Â ¸¶¿îÆ®µÈ ÆÄÀÏ ½Ã½ºÅÛ¿¡ ´ëÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. path´Â ¸¶¿îÆ®µÈ ÆÄÀÏ ½Ã½ºÅÛ³» ÆÄÀÏÀÇ °æ·Î À̸§ÀÌ´Ù. ÆÄÀÏ ½Ã½ºÅÛÀÇ Á¤º¸´Â buf°¡ °¡¸£Å°´Â °ø°£¿¡ ä¿öÁø´Ù. statfs±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.

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]; /* ³ªÁßÀ» À§ÇÑ ¿©À¯ºÐ */
};
		
´ÙÀ½Àº ÆÄÀÏ ½Ã½ºÅÛ Å¸ÀÔÀÌ´Ù.
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
		
Á¤ÀǵÇÁö ¾ÊÀº ÆÄÀϽýºÅÛÀÌ °Ë»öµÇ¾úÀ» °æ¿ì Çʵå´Â -1·Î ¼³Á¤µÈ´Ù.

fstatfs()´Â ¿­¸° ÆÄÀÏÁöÁ¤ÀÚfd¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â statfs()¿Í µ¿ÀÏÇÏ´Ù.


1.3절. ¹Ýȯ°ª

¼º°ø½Ã 0ÀÌ ¸®Åϵǰí, ¿¡·¯°¡ ¹ß»ýÇϸé -1ÀÌ ¸®ÅϵȴÙ.


1.4절. ¿¡·¯

statfs():

ENOTDIR

pathÀÇ °æ·Î ¿ä¼Ò°¡ µð·ºÅ丮°¡ ¾Æ´Ï´Ù.

ENAMETOOLONG

path°¡ ³Ê¹« ±æ´Ù.

ENOENT

Ž»ö Çã°¡±ÇÀÌ path°æ·Î ¿ä¼Ò¿¡¼­ °ÅºÎµÇ¾ú´Ù.

ELOOP

³Ê¹« ¸¹Àº »ó¡ ¿¬°áÀ»pathÇØ¼®½Ã¿¡ ¸¸³µ´Ù.

EFAULT

buf³ªpath°¡ À¯È¿ÇÏÁö ¾ÊÀº ÁÖ¼Ò¸¦ °¡¸®Å°°í ÀÖ´Ù.

EIO

ÆÄÀÏ ½Ã½ºÅÛÀ» Àаųª ¾²´Â µ¿¾È I/O ¿¡·¯°¡ ¹ß»ýÇß´Ù.

ENOMEM

ÀÌ¿ëÇÒ ¼ö ÀÖ´Â Ä¿³Î ¸Þ¸ð¸®°¡ ÃæºÐÇÏÁö ¾Ê´Ù.

ENOSYS

pathÆÄÀÏ ½Ã½ºÅÛÀÌ statfs¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù.

fstatfs():

EBADF

fd´Â À¯È¿ÇÑ ÆÄÀÏÁöÁ¤ÀÚ°¡ ¾Æ´Ï´Ù.

EFAULT

buf°¡ À¯È¿ÇÏÁö ¾ÊÀº ÁÖ¼Ò¸¦ °¡¸®Å°°í ÀÖ´Ù.

ENOSYS

pathÆÄÀÏ ½Ã½ºÅÛÀÌ statfs¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù.

EIO

ÆÄÀÏ ½Ã½ºÅÛÀ» Àаųª ¾²´Â µ¿¾È I/O ¿¡·¯°¡ ¹ß»ýÇß´Ù.



1.5절. ¿¹Á¦

/*
 * ÆÄÀϽýºÅÛ Á¤º¸ ¾ò¾î¿À±â
 * /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);
    }
}
		

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.