scandir - µð·ºÅ丮 Ž»ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

»ç¿ë¹ý

#include <dirent.h> 
 
int scandir(const char *dir, struct dirent ***namelist, 
       int(*select)(const struct dirent *), 
       int(*compar)(const struct dirent **, const struct dirent **)); 
 
int alphasort(const void *a, const void *b); 
int versionsort(const void *a, const void *b); 
 

¼³¸í

scandir()ÇÔ¼ö´Â ÁÖ¾îÁø µð·ºÅ丮 dirÀ» °Ë»öÇϸç, °¢°¢ÀÇ µð·ºÅ丮¿ä¼Ò¸¦ ¹ß°ßÇÒ ¶§¸¶´Ù select ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ¶ÇÇÑ comparÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¼ÒÆ®¸¦ ÇÒ ¼öµµ ÀÖ´Ù. qsort() ÇÔ¼öµîÀ» »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¿¹Á¦


¼³¸í

µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀϵéÀ» °Ë»çÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù. °Ë»çµÈ ÆÄÀÏÀ» À§ÇÑ ÀÛ¾÷À» À§Çؼ­ ÇÔ¼ö Æ÷ÀÎÅ͸¦ µî·ÏÇØ¼­ »ç¿ëÇϵµ·Ï ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç, µð·ºÅ丮 ±íÀÌ °Ë»ç¸¦ À§ÇÑ ±â´Éµµ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

»ç¿ë¹æ¹ý

´ÙÀ½Àº ÇÔ¼ö ¼±¾ðÀÔ´Ï´Ù.
Scandir(char *cwd, void(*func)(char *), int depth) 
 
  1. cwd : °Ë»öÇϰíÀÚ ÇÏ´Â °æ·Î¸í
  2. func : ÇÔ¼ö Æ÷ÀÎÅÍ, ÀÎÀÚ´Â ÆÄÀÏÀ̸§ÀÌ ÁÖ¾îÁø´Ù.
  3. depth : µð·ºÅ丮 °Ë»ö ±íÀÌ. 0ÀÌ¸é ¸ðµç ÇÏÀ§µð·ºÅ丮¸¦ ÀüºÎ °Ë»ö, 0º¸´Ù Å©¸é ÇØ´ç ÀμöÀÇ ±íÀÌ ¸¸Å­¸¸ °Ë»ö

´ÙÀ½Àº »ç¿ë ¿¹ÀÔ´Ï´Ù.
// ´Ü¼ø Ãâ·ÂÇÑ´Ù. 
void myfunc(char *file) 
{ 
    print("--> %s\n", file); 
} 
 
int main() 
{ 
    // homeµð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀϰú ±× ÇϺεð·ºÅ丮ÀÇ ÆÄÀÏÀ» 
    // °Ë»öÇÑÈÄ myfunc¸¦ È£ÃâÇØ¼­ ´Ü¼ø Ãâ·ÂÇÑ´Ù. 
    Scandir("/home", myfunc, 0); 
} 
 

ÄÚµå

#include <sys/stat.h> 
#include <dirent.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
 
static int  indent = 0; 
 
char cdir[256]; 
void myfunc(char *file) 
{ 
    printf("%s/%s\n", getcwd(cdir, 256),file); 
} 
 
void Scandir(char *wd, void (*func)(char *), int depth) 
{ 
    struct dirent **items; 
    int nitems, i; 
    // ÀÎÀÚ·Î ¹ÞÀº µð·ºÅ丮·Î À̵¿ÇÑ´Ù. 
    if (chdir(wd) < 0) 
    { 
        printf("DIR : %s\n", wd); 
        perror("chdir "); 
        exit(1); 
    } 
 
    // scandir ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÇöÀç µð·ºÅ丮ÀÇ 
    // ¸ðµç ÆÄÀϰú µð·ºÅ丮ÀÇ ³»¿ëÀ» °¡Á®¿Â´Ù. 
    nitems = scandir(".", &items, NULL, alphasort); 
 
    // µð·ºÅ丮(ÆÄÀÏÆ÷ÇÔ) Ç׸ñÀÇ °¹¼ö¸¸Å­ ·çÇÁ¸¦ µ¹¸®¸ç  
    // ¸¸¾à ÇØ´ç ÆÄÀÏÀÌ µð·ºÅ丮 Àϰæ¿ì 
    // Scandir ÇÔ¼ö¸¦ Àç±Í È£ÃâÇÑ´Ù. 
    for (i = 0; i < nitems; i++) 
    { 
        // ÆÄÀÏ »óŸ¦ ÀúÀåÇϱâ À§ÇÑ ±¸Á¶Ã¼ 
        struct stat fstat; 
 
        // ÇöÀçµð·ºÅ丮, ÀÌÀüµð·ºÅ丮 ´Â ¹«½ÃÇÑ´Ù. 
        if ( (!strcmp(items[i]->d_name, ".")) || (!strcmp(items[i]->d_name, "..")) ) 
        {  
            continue; 
        } 
 
        // ÇÔ¼öÆ÷ÀÎÅ͸¦ È£ÃâÇÑ´Ù. ÀÎÀÚ·Î °Ë»öÇÑ ÆÄÀÏÀ̸§ÀÌ ³Ñ¾î°£´Ù.  
        func(items[i]->d_name); 
 
        // ¸¸¾à ÆÄÀÏÀÌ µð·ºÅ丮 À̶ó¸é 
        // Scandir À» Àç±Í È£ÃâÇÑ´Ù. 
        // ±×¸®°í µð·ºÅ丮ÀÇ depth ·¹º§À» 1 Áõ°¡ ÇÑ´Ù. 
        lstat(items[i]->d_name, &fstat); 
        if ((fstat.st_mode & S_IFDIR) == S_IFDIR) 
        { 
            // depth¸¸Å­¸¸ ÇϺΠµð·ºÅ丮°Ë»öÀ» ÇÑ´Ù. 
            // 0ÀÏ °æ¿ì ±íÀÌ¿¡ °ü°è¾øÀÌ °Ë»öÇÑ´Ù. 
            if (indent < (depth-1) || (depth == 0)) 
            { 
                   indent ++; 
                 Scandir(items[i]->d_name, func, depth); 
            } 
        } 
    } 
    // µð·ºÅ丮ÀÇ depth ·¹º§À» 1 °¨¼Ò½Ã۰í 
    // ÇÏÀ§ µð·ºÅ丮·Î À̵¿ÇÑ´Ù. 
    indent --; 
    chdir(".."); 
} 
 

º¯°æ»çÇ×


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