scandir

Autres langues

Langue: ja

Version: 2001-12-26 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

scandir, alphasort, versionsort - ¥Ç¥£¥ì¥¯¥È¥ê¤òÁöºº¤¹¤ë

½ñ¼°


#include <dirent.h>



int scandir(const char *dir, struct dirent ***namelist,

int(*filter)(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 ¤òÁöºº¤·¡¢ ¥Ç¥£¥ì¥¯¥È¥ê¤Î³Æ¥¨¥ó¥È¥ê¤ò°ú¤­¿ô¤È¤·¤Æ filter() ¤ò¸Æ¤Ó½Ð¤¹¡£ filter() ¤¬ 0 °Ê³°¤ÎÃͤòÊÖ¤¹¥¨¥ó¥È¥ê¤Ï malloc(3) ¤Ë¤è¤Ã¤Æ ³ÎÊݤµ¤ì¤¿Ê¸»úÎó¤ËÊݸ¤µ¤ì¡¢Èæ³Ó´Ø¿ô compar() ¤òÍѤ¤¤Æ qsort(3) ¤Ë¤è¤ê¥½¡¼¥È¤µ¤ì¡¢ malloc(3) ¤Ë¤è¤ê³ÎÊݤµ¤ì¤¿ÇÛÎó namelist ¤Ë¤Þ¤È¤á¤é¤ì¤ë¡£ filter ¤¬ NULL ¤Ê¤é¤Ð¡¢¤¹¤Ù¤Æ¤Î¥¨¥ó¥È¥ê¤¬ÁªÂò¤µ¤ì¤ë¡£

Èæ³Ó´Ø¿ô compar() ¤Ë¤Ï alphasort() ´Ø¿ô¤È versionsort() ´Ø¿ô¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£ alphasort() ¤Ï strcoll(3) ¤òÍѤ¤¤Æ¥Ç¥£¥ì¥¯¥È¥ê¥¨¥ó¥È¥ê¤ò¥½¡¼¥È¤·¡¢ versionsort() ¤Ïʸ»úÎó (*a)->d_name ¤È (*b)->d_name ¤ËÂФ·¤Æ strverscmp(3) ¤òÍѤ¤¤ë¡£

ÊÖ¤êÃÍ

´Ø¿ô scandir() ¤ÏÁªÂò¤µ¤ì¤¿¥¨¥ó¥È¥ê¤Î¿ô¤«¡¢ (¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç) -1 ¤òÊÖ¤¹¡£

´Ø¿ô alphasort() ¤È versionsort() ¤Ï 1 ÈÖÌܤΰú¤­¿ô¤¬ 2 ÈÖÌܤΰú¤­¿ô¤ËÂФ·¤Æ¡¢ [¾®¤µ¤¤/Åù¤·¤¤/Â礭¤¤] ¤«¤Ë±þ¤¸¤Æ¡¢0 ¤è¤ê [¾®¤µ¤¤/Åù¤·¤¤/Â礭¤¤] ÃͤòÊÖ¤¹¡£

¥¨¥é¡¼

ENOMEM
Æ°ºî¤ò´°¿ë¤¹¤ë¤Ë¤Ï¥á¥â¥ê¤¬Â­¤ê¤Ê¤¤¡£

½àµò

¤³¤ì¤é¤Î´Ø¿ô¤Ï¤¤¤º¤ì¤â POSIX.1-2001 ¤Ë¤Ï¤Ê¤¤¤¬¡¢ alphasort() ¤È scandir() ¤Ï POSIX.1 ¤Î¾­Íè¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë´Þ¤á¤ë¤«¸¡Æ¤Ãæ¤Ç¤¢¤ë¡£

´Ø¿ô scandir() ¤È alphasort() ¤Ï 4.3BSD ¤«¤é¼è¤êÆþ¤ì¤é¤ì¡¢Linux ¤Ç¤Ï libc4 ¤«¤é»ÈÍѲÄǽ¤Ë¤Ê¤Ã¤¿¡£ libc4 ¤È libc5 ¤Ç¤Ï°Ê²¼¤Î¤è¤¦¤Ê¤â¤Ã¤È¾ÜºÙ¤Ê¥×¥í¥È¥¿¥¤¥×¤ò»È¤Ã¤Æ¤¤¤ë¡£


    int alphasort(const struct dirent ** a,

                  const struct dirent **b);

¤·¤«¤· glibc 2.0 ¤Ç¤ÏÉÔÀµ³Î¤Ê BSD ¤Î¥×¥í¥È¥¿¥¤¥×¤ËÌá¤Ã¤¿¡£

´Ø¿ô versionsort() ¤Ï GNU ¤Î³ÈÄ¥¤Ç¤¢¤ê¡¢glibc 2.1 °Ê¹ß¤Ç»ÈÍѲÄǽ¤Ç¤¢¤ë¡£

glibc 2.1 °Ê¹ß¤Ç¤Ï alphasort() ¤Ï strcoll(3) ¤ò¸Æ¤Ó½Ð¤¹¡£ alphasort() ¤Ï°ÊÁ°¤Ï strcmp(3) ¤ò»È¤Ã¤Æ¤¤¤¿¡£

Îã


/* ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Õ¥¡¥¤¥ë¤òµÕ½ç¤Ë½ÐÎϤ¹¤ë */

#include <dirent.h>



int

main(void)

{

    struct dirent **namelist;

    int n;



    n = scandir(".", &namelist, 0, alphasort);

    if (n < 0)

        perror("scandir");

    else {

        while(n--) {

            printf("%s\n", namelist[n]->d_name);

            free(namelist[n]);

        }

        free(namelist);

    }

}

´ØÏ¢¹àÌÜ

closedir(3), fnmatch(3), opendir(3), readdir(3), rewinddir(3), seekdir(3), strcmp(3), strcoll(3), strverscmp(3), telldir(3)