ftw

Autres langues

Langue: ja

Version: 2006-05-24 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

ftw, nftw - ¥Õ¥¡¥¤¥ë¥Ä¥ê¡¼¤òÊ⤭¤Þ¤ï¤ë

½ñ¼°


#include <ftw.h>



int ftw(const char *dirpath,

        int (*fn) (const char *fpath, const struct stat *sb,

                   int typeflag),

        int nopenfd);



#define _XOPEN_SOURCE 500

#include <ftw.h>



int nftw(const char *dirpath,

        int (*fn) (const char *fpath, const struct stat *sb,

                   int typeflag, struct FTW *ftwbuf),

        int nopenfd, int flags);

ÀâÌÀ

ftw() ¤Ï¡¢ dirpath ¤Ç»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼Á´ÂΤòÊ⤭¤Þ¤ï¤ê¡¢ ¥Ä¥ê¡¼Ãæ¤Ç¥¨¥ó¥È¥ê¤¬¸«ÉÕ¤«¤ë¤´¤È¤Ë¡¢ fn() ¤ò¸Æ¤Ó½Ð¤¹¡£ ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¤½¤Î¤â¤Î¤¬¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤ä ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤è¤ê¤âÀè¤Ë½èÍý¤µ¤ì¤ë (¹Ô¤­¤¬¤±½çõº÷; pre-order traversal)¡£

¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤¬ÍøÍѲÄǽ¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»È¤¤ÀÚ¤Ã¤Æ ¤·¤Þ¤ï¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤¿¤á¡¢ ftw() ¤¬Æ±»þ¤Ë¥ª¡¼¥×¥ó¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ÎºÇÂç¿ô¤ò nopenfd ¤Ç»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ õº÷¤Î¿¼¤µ¤¬¤³¤ÎÃͤò±Û¤¨¤ë¤È¡¢ °ì¤Ä¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òÊĤ¸¤Æ¤«¤é¾¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò¥ª¡¼¥×¥ó¤·Ä¾¤¹¤³¤È ¤Ë¤Ê¤ë¤Î¤Ç¡¢ ftw() ¤ÎÆ°ºî¤ÏÃÙ¤¯¤Ê¤ë¡£ ftw() ¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤Î³¬ÁØ 1 ¥ì¥Ù¥ë¤Ë¤Ä¤­¡¢ ºÇÂç¤Ç¤â°ì¤Ä¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤·¤«»ÈÍѤ·¤Ê¤¤¡£

¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤Ç¸«¤Ä¤«¤Ã¤¿¥¨¥ó¥È¥êËè¤Ë¡¢ ftw() ¤Ï fpath, sb, typeflag ¤Î 3¤Ä¤ò°ú¤­¿ô¤È¤·¤Æ fn() ¤ò¸Æ¤Ó½Ð¤¹¡£ fpath ¤Ï¥¨¥ó¥È¥ê¤Î dirpath ¤«¤é¤ÎÁêÂХѥ¹Ì¾¤Ç¤¢¤ë¡£ sb ¤Ï fpath ¤ËÂФ¹¤ë stat(2) ¤Î¸Æ¤Ó½Ð¤·¤ÇÊÖ¤µ¤ì¤ë stat ¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£ typeflag ¤ÏÀ°¿ô¤Ç¡¢°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«°ì¤Ä¤Ç¤¢¤ë:

FTW_F
fpath ¤¬Ä̾ï¤Î¥Õ¥¡¥¤¥ë¤Ç¤¢¤ë
FTW_D
fpath ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¢¤ë
FTW_DNR
fpath ¤¬Æɤ߹þ¤ß¤Ç¤­¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¢¤ë
FTW_NS
¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Ç¤Ï¤Ê¤¤ fpath ¤ËÂФ¹¤ë stat(2) ¸Æ¤Ó½Ð¤·¤¬¼ºÇÔ¤·¤¿¡£

fpath ¤¬¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Ç¡¢¤«¤Ä stat(2) ¤¬¼ºÇÔ¤·¤¿¾ì¹ç¡¢ FTW_NS ¤È FTW_SL (¸å½Ò) ¤Î¤É¤Á¤é¤¬ typeflag ¤ËÅϤµ¤ì¤ë¤«¤Ï̤ÄêµÁ¤Ç¤¢¤ë¤È¡¢POSIX.1-2001 ¤Ë¤Ï½ñ¤«¤ì¤Æ¤¤¤ë¡£

¥Ä¥ê¡¼¤Îõº÷¤ò»ß¤á¤¿¤¤¾ì¹ç¤Ï¡¢ fn() ¤¬ 0 °Ê³°¤ÎÃͤòÊÖ¤»¤ÐÎɤ¤ (¤³¤ÎÃÍ¤Ï ftw() ¼«¿È¤ÎÌá¤êÃͤȤʤë)¡£ ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï ftw() ¤Ï¥Ä¥ê¡¼Á´ÂΤÎõº÷¤ò³¤±¡¢¤¹¤Ù¤Æ¤Î¥Ä¥ê¡¼¤òõº÷¤·½ª¤¨¤¿¤È¤³¤í¤Ç 0 ¤òÊÖ¤¹¡£Ãµº÷Ãæ¤Ë (malloc(3) ¤Î¼ºÇԤʤɤÎ) ¥¨¥é¡¼¤¬µ¯¤³¤ë¤È -1 ¤òÊÖ¤¹¡£

ftw() ¤ÏưŪ¤Ê¥Ç¡¼¥¿¹½Â¤¤òÍѤ¤¤ë¤Î¤Ç¡¢¥Ä¥ê¡¼Ãµº÷¤ò°ÂÁ´¤ËÃæÃǤ¹¤ëÍ£°ì¤ÎÊýË¡¤Ï 0 °Ê³°¤ÎÃͤò fn() ¤ÎÊÖ¤êÃͤȤ¹¤ë¤³¤È¤Ç¤¢¤ë¡£³ä¤ê¹þ¤ß¤ò°·¤¦¤Ë¤Ï¡¢ Î㤨¤ÐȯÀ¸¤·¤¿³ä¤ê¹þ¤ß¤ò¥Þ¡¼¥¯¤·¤Æ¤ª¤¤¤Æ¡¢ 0 °Ê³°¤ÎÃͤòÊÖ¤¹¤è¤¦¤Ë¤¹¤ë ¥·¥°¥Ê¥ë¤Ë¤è¤ê¥á¥â¥ê¥ê¡¼¥¯¤òµ¯¤³¤µ¤º¤Ëõº÷¤ò½ªÎ»¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢ ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ç fn() ¤¬¥Á¥§¥Ã¥¯¤¹¤ë¥°¥í¡¼¥Ð¥ë¤Ê¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë¤¹¤ì¤Ð¤è¤¤¡£ ¥×¥í¥°¥é¥à¤ò½ªÎ»¤µ¤»¤ë¾ì¹ç°Ê³°¤Ï¡¢ longjmp(3) ¤ò»ÈÍѤ·¤Ê¤¤¤³¤È¡£

nftw()

´Ø¿ô nftw() ¤Ï ftw() ¤ÈƱ¤¸¤À¤¬¡¢°ú¤­¿ô flags ¤¬Äɲ䵤ì¤ëÅÀ¤È¡¢ fn() ¤Î°ú¤­¿ô¤Ë ftwbuf ¤¬Äɲ䵤ì¤ëÅÀ¤¬°Û¤Ê¤ë¡£

¤³¤Î flags °ú¤­¿ô¤Ï²¼µ­¤Î¥Õ¥é¥°¤Î 0 ¸Ä°Ê¾å¤ÎÏÀÍýϤò¼è¤Ã¤¿¤â¤Î¤Ç¤¢¤ë:

FTW_ACTIONRETVAL (glibc 2.3.3 °Ê¹ß)
¤³¤Î¥Õ¥é¥°¤Ï glibc ¸ÇÍ­¤Ç¤¢¤ë¡£ ¤³¤Î¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¤È¡¢ nftw() ¤Î fn() ¤ÎÊÖ¤êÃͤΰ·¤¤¤¬ÊѤï¤ë¡£ fn() ¤Ï°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«°ì¤Ä¤òÊÖ¤¹É¬Íפ¬¤¢¤ë¡£
FTW_CONTINUE
nftw() ¤ÏÄ̾ïÄ̤ê½èÍý¤ò³¤±¤ë¡£
FTW_SKIP_SIBLINGS
fn() ¤¬¤³¤ÎÃͤòÊÖ¤·¤¿¾ì¹ç¡¢½èÍýÃæ¤Î¥¨¥ó¥È¥ê¤Î·»Äï (Ʊ¤¸³¬ÁؤΥ¨¥ó¥È¥ê) ¤Î½èÍý¤Ï¥¹¥­¥Ã¥×¤µ¤ì¡¢¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤Ç³¤­¤Î½èÍý¤¬¹Ô¤ï¤ì¤ë¡£
FTW_SKIP_SUBTREE
fn() ¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¥¨¥ó¥È¥ê¤¬¥Ç¥£¥ì¥¯¥È¥ê (typeflag ¤¬ FTW_D) ¤Î¾ì¹ç¤Ë¡¢¤³¤ÎÃͤòÊÖ¤¹¤È fn() ¤Î°ú¤­¿ô¤È¤·¤ÆÅϤµ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥êÆâ¤Î¥¨¥ó¥È¥ê¤Î½èÍý¤¬¹Ô¤ï¤ì¤Ê¤¯¤Ê¤ë¡£ nftw() ¤Ï½èÍýÃæ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î·»Äï (Ʊ¤¸³¬ÁؤΥ¨¥ó¥È¥ê) ¤«¤é½èÍý¤ò³¤±¤ë¡£
FTW_STOP
nftw () ¤Ï¡¢ÊÖ¤êÃÍ FTW_STOP ¤Ç¤¹¤°¤ËÉüµ¢¤¹¤ë¡£

¾¤ÎÊÖ¤êÃͤϾ­Íè¿·¤·¤¤Æ°ºî¤ËÂбþÉÕ¤±¤é¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¡£ fn() ¤Ï¾åµ­¤Î¥ê¥¹¥È¤Ë¤¢¤ëÃͰʳ°¤òÊÖ¤µ¤Ê¤¤¤è¤¦¤Ë¤¹¤Ù¤­¤Ç¤¢¤ë¡£

<ftw.h> ¤Ç FTW_ACTIONRETVAL ¤¬ÄêµÁ¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢ µ¡Ç½¸¡ºº¥Þ¥¯¥í _GNU_SOURCE ¤òÄêµÁ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

FTW_CHDIR
¥»¥Ã¥È¤µ¤ì¤ë¤È¡¢¥Ç¥£¥ì¥¯¥È¥ê¤ÎÆâÍƤò½èÍý¤¹¤ëÁ°¤Ë ¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë chdir(2) ¤¹¤ë¡£¤³¤Î¥Õ¥é¥°¤Ï¡¢ fpath ¤¬Â°¤¹¥Ç¥£¥ì¥¯¥È¥ê¤Ç²¿¤é¤«¤ÎÆ°ºî¤ò¼Â¹Ô¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤Ë ÊØÍø¤Ç¤¢¤ë¡£
FTW_DEPTH
¥»¥Ã¥È¤µ¤ì¤ë¤È¡¢µ¢¤ê¤¬¤±½çõº÷ (post-order traversal) ¤ò¹Ô¤¦¡£ ¤Ä¤Þ¤ê¡¢¥Ç¥£¥ì¥¯¥È¥ê¤½¤Î¤â¤Î¤ò°ú¤­¿ô¤È¤·¤¿ fn() ¸Æ½Ð¤·¤Ï¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë¤È¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë ÂФ¹¤ë½èÍý¤Î¡Ö¸å¤Ç¡×¹Ô¤ï¤ì¤ë (¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¼«¿È¤Î½èÍý¤Ï¥Ç¥£¥ì¥¯¥È¥êÆâ¤Î¥¨¥ó¥È¥ê ¤è¤ê¡ÖÁ°¤Ë¡×¹Ô¤Ê¤ï¤ì¤ë)¡£
FTW_MOUNT
¥»¥Ã¥È¤µ¤ì¤ë¤È¡¢Æ±¤¸¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎÃæ¤À¤±¤òõº÷ÂоݤȤ¹¤ë (¤Ä¤Þ¤ê¡¢¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È¤ò¤Þ¤¿¤°¤³¤È¤Ï¤Ê¤¤)¡£
FTW_PHYS
¥»¥Ã¥È¤µ¤ì¤ë¤È¡¢¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òé¤é¤Ê¤¤ (¤ª¤½¤é¤¯¤³¤Á¤é¤¬ Ä̾ï˾¤Þ¤·¤¤Æ°ºî¤À¤í¤¦)¡£¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò é¤ë¤¬¡¢Æ±¤¸¥Õ¥¡¥¤¥ë¤¬Æó²óÊó¹ð¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¡£

FTW_PHYS ¤¬¥»¥Ã¥È¤µ¤ì¤º¤Ë FTW_DEPTH ¤¬¥»¥Ã¥È¤µ¤ì¤ë¤È¡¢¼«Ê¬¼«¿È¤ËÂФ¹¤ë¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òÇÛ²¼¤Ë»ý¤Ä ¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ fn() ¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¤³¤È¤Ï·è¤·¤Æ¤Ê¤¤¡£

¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤Î¥¨¥ó¥È¥êËè¤Ë¡¢ nftw() ¤Ï 4¤Ä¤Î°ú¤­¿ô¤Ç fn() ¤ò¸Æ¤Ó½Ð¤¹¡£ fpath ¤È sb ¤Ï ftw() ¤ÈƱ¤¸¤Ç¤¢¤ë¡£ typeflag ¤Ë¤Ï¡¢ ftw() ¤Ç¼è¤êÆÀ¤ëÃͤΤ¤¤º¤ì¤«¡¢¤Þ¤¿¤Ï°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«¤¬ÅϤµ¤ì¤ë:

FTW_DP
fpath ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¡¢¤«¤Ä flags ¤Ç FTW_DEPTH ¤¬»ØÄꤵ¤ì¤Æ¤¤¤¿¡£ fpath ÇÛ²¼¤Î¥Õ¥¡¥¤¥ë¤È¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ÏÁ´¤Æ½èÍý¤¬½ª¤ï¤Ã¤Æ¤¤¤ë¡£
FTW_SL
fpath ¤¬¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Ç¡¢¤«¤Ä FTW_PHYS ¤¬ flags ¤Ë ¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤¿¡£
FTW_SLN
fpath ¤¬¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Ç¡¢Â¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë¤ò»Ø¤·¤Æ¤¤¤ë (¤³¤ì¤¬¥»¥Ã¥È¤µ¤ì¤ë¤Î¤Ï FTW_PHYS ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤À¤±¤Ç¤¢¤ë)¡£

nftw() ¤¬ fn() ¤ò¸Æ¤Ó½Ð¤¹ºÝ¤ËÅϤ¹ 4¤Ä¤á¤Î°ú¤­¿ô¤Ï FTW ·¿¤Î¹½Â¤ÂΤǤ¢¤ë¡£




struct FTW {

    int base;

    int level;

};



base ¤Ï¡¢¥Õ¥¡¥¤¥ë̾ (basename Í×ÁÇ) ¤Î¡¢ fpath ¤ÇÅϤµ¤ì¤ë¥Ñ¥¹Ì¾¤ÎÃæ¤Ç¤Î¥ª¥Õ¥»¥Ã¥È¤Ç¤¢¤ë¡£ level ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤Ç¤Î fpath ¤Î¿¼¤µ¤ò¼¨¤¹¡£¿¼¤µ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤Î¥È¥Ã¥× (root) ¤«¤é¤Î ÁêÂÐÃͤǤ¢¤ë (dirpath ¤Ï¿¼¤µ 0 ¤Ç¤¢¤ë)¡£

ÊÖ¤êÃÍ

¤³¤ì¤é¤Î´Ø¿ô¤Ï¡¢À®¸ù¤¹¤ë¤È 0 ¤ò¡¢¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤È -1 ¤òÊÖ¤¹¡£

fn() ¤¬ 0 °Ê³°¤òÊÖ¤·¤¿¾ì¹ç¡¢¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤Îõº÷¤ò½ªÎ»¤·¡¢ fn() ¤¬ÊÖ¤·¤¿Ãͤò ftw() ¤ä nftw() ¤Î·ë²Ì¤È¤·¤ÆÊÖ¤¹¡£

nftw() ¤¬ FTW_ACTIONRETVAL ¥Õ¥é¥°ÉÕ¤­¤Ç¸Æ¤Ð¤ì¤¿¾ì¹ç¡¢¥Ä¥ê¡¼¤Îõº÷¤ò½ªÎ»¤µ¤»¤ë¤¿¤á¤Ë fn() ¤¬»ÈÍѤǤ­¤ë¡¢Èó 0 ¤ÎÃÍ¤Ï FTW_STOP ¤À¤±¤Ç¤¢¤ê¡¢ ¤³¤ÎÃÍ¤Ï nftw() ¤ÎÊÖ¤êÃͤȤ·¤ÆÊÖ¤µ¤ì¤ë¡£

½àµò

POSIX.1-2001, SVr4, SUSv1.

Ãí°Õ

nftw() ´Ø¿ô¤È¡¢ ftw() ¤Ë¤ª¤±¤ë FTW_SL ¤Ï¡¢SUSv1 ¤ÇƳÆþ¤µ¤ì¤¿¡£

ftw() ¤Ç FTW_SL ¤ò°ìÀڻȤï¤Ê¤¤¥·¥¹¥Æ¥à¤ä¡¢ ¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë¤ò»Ø¤·¤Æ¤¤¤ë¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Î¾ì¹ç¤Ë¤Î¤ß FTW_SL ¤ò»È¤¦¥·¥¹¥Æ¥à¡¢¤Þ¤¿ ftw() ¤¬Á´¤Æ¤Î¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ËÂФ·¤Æ FTW_SL ¤ò»È¤¦¥·¥¹¥Æ¥à¤â¤¢¤ë¡£ ͽ¬²Äǽ¤ÊÆ°ºî¤ò¤µ¤»¤ë¤¿¤á¤Ë¤Ï¡¢ nftw() ¤ò»È¤¦¤³¤È¡£

Linux ¤Ç¤Ï¡¢ libc4, libc5, glibc 2.0.6 ¤Ï ¡Östat ¤Ç¤­¤ë¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¡× (¥Õ¥¡¥¤¥ë, ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯, fifo Åù) ¤ËÂФ·¤Æ¤Ï¤¹¤Ù¤Æ FTW_F ¤ò»È¤¦¡£

nftw() ´Ø¿ô¤Ï glibc 2.1 °Ê¹ß¤ÇÍøÍѤǤ­¤ë¡£

FTW_ACTIONRETVAL ¤Ï glibc ¸ÇÍ­¤Ç¤¢¤ë¡£

Îã

°Ê²¼¤Î¥×¥í¥°¥é¥à¤Ï¡¢°ì¤ÄÌܤΥ³¥Þ¥ó¥É¥é¥¤¥ó°ú¤­¿ô¤ò̾Á°¤Ë»ý¤Ä¥Ñ¥¹°Ê²¼¤Î ¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤òõº÷¤¹¤ë¡£°ú¤­¿ô¤¬»ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢ ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤òõº÷¤¹¤ë¡£ ³Æ¡¹¤Î¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤ÆÍÍ¡¹¤Î¾ðÊó¤¬É½¼¨¤µ¤ì¤ë¡£ ÆóÈÖÌܤΥ³¥Þ¥ó¥É¥é¥¤¥ó°ú¤­¿ô¤Ëʸ»ú¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢ nftw() ¤ò¸Æ¤Ó½Ð¤¹ºÝ¤Ë flags °ú¤­¿ô¤ËÅϤ¹ÃͤòÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£



#define _XOPEN_SOURCE 500

#include <ftw.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



static int

display_info(const char *fpath, const struct stat *sb,

             int tflag, struct FTW *ftwbuf)

{

    printf("%-3s %2d %7lld   %-40s %d %s\n",

        (tflag == FTW_D) ?   "d"   : (tflag == FTW_DNR) ? "dnr" :

        (tflag == FTW_DP) ?  "dp"  : (tflag == FTW_F) ?   "f" :

        (tflag == FTW_DP) ?  "dp"  : (tflag == FTW_SL) ?  "sl" :

        (tflag == FTW_SLN) ? "sln" : "???",

        ftwbuf->level, (long long) sb->st_size,

        fpath, ftwbuf->base, fpath + ftwbuf->base);

    return 0;           /* To tell nftw() to continue */

}



int

main(int argc, char *argv[])

{

    int flags = 0;



    if (argc > 2 && strchr(argv[2], 'd') != NULL)

        flags |= FTW_DEPTH;

    if (argc > 2 && strchr(argv[2], 'p') != NULL)

        flags |= FTW_PHYS;



    nftw((argc < 2) ? "." : argv[1], display_info, 20, flags);

    exit(EXIT_SUCCESS);

}

´ØÏ¢¹àÌÜ

stat(2), fts(3), readdir(3), feature_test_macros(7)