glob

ëªì¹
     glob, globfree

íë¡ê·¸ë¨ ë¼ì´ë¸ë¬ë¦¬
     Standard C Library (libc, -lc) — í¨í´ì ì í©íë í¨ì¤ëªì ìì±

ìì
     #include <glob.h>
     int glob(const char *pattern, int flags, int (*errfunc)(const char *,
     int), glob_t *pglob) void globfree(glob_t *pglob)

í´ì¤
     glob() í¨ìë, ìì ìí´ ì¬ì©ëë íì¼ëª í¨í´ì, ì í© ê·ì¹ì ì¤ì¥íë í¨ì¤ëª
     ì ë¤ë ì´í°ìëë¤.

     ì¸í´ë£¨ë íì¼ glob.h (ì)ë, ì ì´ë ë¤ìì ëíë´ë íëê° í¬í¨ëë¤ êµ¬ì¡°ì²´ íì
     glob_t (ì)를 ì ìí©ëë¤.

     typedef struct {
             int gl_pathc;           /* ì§ê¸ê¹ì§ì í©ê³ í¨ì¤ ì¹´ì´í¸ */
             int gl_matchc;          /* í¨í´ì ì í©íë í¨ì¤ ì¹´ì´í¸ */
             int gl_offs;            /* gl_pathvì ìµì´ë¡ ìì½ëë íë */
             int gl_flags;           /* ëë ¤ì£¼ì´ì§ë íëê·¸ */
             char **gl_pathv;        /* í¨í´ì ì í©íë í¨ì¤ì 리ì¤í¸ */
     } glob_t;

     ì¸ì pattern (ì)ë ì ê°íë í¨ì¤ëª í¨í´ì í¬ì¸í°ìëë¤.  glob() ì¸ìë ê·¸ í¨í´ì
     ëí´ì, ì¡ì¸ì¤ ê°ë¥í ëª¨ë  í¨ì¤ëªì ë§ëê³  (매ì¹), ì í©íë í¨ì¤ëª 리ì¤í¸ë¥¼
     ìì±í©ëë¤. í¨ì¤ëªì ì¡ì¸ì¤ í기 ìí(í´) glob() (ì)ë, í¨ì¤ ì ê° ìê°ìì (ìµì¢
     ìì를 ì ì¸íë¤) ììì ê²ì íê°ì í¹ì ìºë¦í° ‘*’, ‘? ’ ëë ‘[’ ë±ì í¬í¨íë¤
     pattern ì, ëª¨ë  íì¼ëª ìê°ìì ëë í 리ì ì½ê¸° í¬í¨ íê°ë¥¼ ì구í©ëë¤.

     glob() ì¸ìë, ì í© í¨ì¤ëªì ì를 gl_pathc íëì, í¨ì¤ëª í¬ì¸í° 리ì¤í¸ ì
     í¬ì¸í°ë¥¼ gl_pathv íëì ê°ê° ë³´ì¡´í©ëë¤. ìµì¢ í¨ì¤ëªì ë¤ì ìµì´ì í¬ì¸í°ë
     NULL ìëë¤. í¨í´ì ì í©íë í¨ì¤ëªì´ ì 무ìë ê²½ì°, ëë ¤ì£¼ì´ì§ë ì í© í¨ì¤ì
     ìë 0 ì¼ë¡ ì¤ì ë©ëë¤.

     pglob ê·¸ë¦¬ê³  ëíëë 구조체ë í¸ì¶í´ ìì´ ìì±í©ëë¤.  gl_pathv 그리ê³
     ëíëë ë©ëª¨ë¦¬ ë± ë¤ë¥¸ ê³µê°ì, glob() í¨ìê° íìì ë°ë¼ì í ë¹í©ëë¤.

     ì¸ì flags (ì)ë, glob() ì ê±°ëì ë³ê²½í기 ìí´ì ì¬ì©í©ëë¤.  flags ì ê°ì,
     glob.h ê·¸ë¦¬ê³  ì ìëê³  ìë ë¤ìì ëíë´ë ê°ì ê°ê° ë¹í¸ë§ë¤ì í¬ê´ì  OR ìëë¤.

     GLOB_APPEND      ìì±ë í¨ì¤ëªì, glob() ì ëí기 ì ì í¸ì¶ (ë¨ì ëë ë³µì)ë¡
                      ìì±ë í¨ì¤ëªì ì¶ê°í©ëë¤.  gl_pathc ì ê°ì, ì´ë² í¸ì¶ ë°
                      ì ì í¸ì¶ (ë¨ì ëë ë³µì)ììì, ì í© í¨ì¤ëªì í©ê³ê° ë©ëë¤.
                      ì ì í¸ì¶ (ë¨ì ëë ë³µì)ì ìí´ ëë ¤ì£¼ì´ì§ í¨ì¤ëªì, ì´ë²
                      ìì±ë í¨ì¤ëªì´ ì¶ê°ë©ëë¤ë§, merge (ë³í©)ë ëì§ ììµëë¤. ì ì
                      í¸ì¶ê³¼ ì´ë² í¸ì¶ëìì, í¸ì¶ìëë GLOB_DOOFFS íë그를
                      ë°ê¾¸ì´ìë ìë©ëë¤. ê°ì´ GLOB_DOOFFS ì¤ì ìì gl_offs ì ê°ë
                      ë°ê¾¸ì´ìë ìë©ëë¤.  (ë¬¼ë¡ ) pglob ì ìí¥ì ì¤ë¤ globfree()
                      ì í¸ì¶ë ê° ëì§ ììµëë¤.

     GLOB_DOOFFS      gl_offs íë를 ì í¨íê² í©ëë¤. ì´ íë그를 ì¤ì íë©´(ì),
                      gl_pathv íëì ìì ë¶ê°íë¤ NULL í¬ì¸í°ì ìê°, gl_offs ì ìí´
                      ì§ì í  ì ììµëë¤. ë°ê¾¸ì´ ë§íë©´ gl_pathv íì§ë§ gl_offs ì
                      NULL í¬ì¸í°ë¥¼ ëíë´, ê·¸ íì gl_pathc í¨ì¤ëª í¬ì¸í°ê°
                      ê³ìëì´, í층 ë ê·¸ íì NULL í¬ì¸í°ê° ê³ìë©ëë¤.

     GLOB_ERR         ì¤í ëë ì½ì ì ìë ëë í 리를 ë§ë¬ì ê²½ì°, glob() (ì)를
                      ë¦¬í´ ìíµëë¤. íµìì, glob() íì§ë§ ì í© í¨ì¤ëª ê²ìì
                      ìíí©ëë¤.

     GLOB_MARK        pattern ì ì í©íë ëë í 리ì ê° í¨ì¤ëªì, slash를
                      ë¶ê°í©ëë¤.

     GLOB_NOCHECK     pattern ì ì í©íë í¨ì¤ëªì´ ì 무ìë ê²½ì°, glob() í
                      pattern ë§ì¼ë¡ 구ì±ëë 리ì¤í¸ë¥¼ ëë ¤ì¤ëë¤. í¨ì¤ëªì
                      í©ê³ìë 1 ì, ì í© í¨ì¤ëªì ìë 0 ì¼ë¡ ì¤ì ë©ëë¤.
                      GLOB_QUOTE íì§ë§ ì¤ì ëì´ ìì¼ë©´, ëë ¤ì£¼ì´ì§ë í¨í´ì ê·¸
                      í¨ê³¼ê° ë°ìë©ëë¤.

     GLOB_NOSORT      ëí´í¸ë¡ í¨ì¤ëªì ASCII ì¹ìì ì ë ¬ ë©ëë¤. ì´ íëê·¸ë ê·¸ë¬í
                      ìí¸, ì¦ ê³ ìí glob() 기ë¥ì ë°©í´í©ëë¤.

     ë¤ìì ëíë´ë ê°ë flags ì í¬í¨ëë ê²ì ììµëë¤ë§, ì´ê²ë¤ì IEEE Std 1003.2
     (“POSIX.2”) ì ë¹íì¤ íì¥ìëë¤.

     GLOB_ALTDIRFUNC  pglob 구조체ì ë¤ìì ëíë´ë ì¶ê° íë를, ëë í 리ì ì¤í,
                      ì½ì´ë¤ì¬, í´ë¡ì°ì¦ ë°, ê·¸ê²ë¤ ëë í 리ìì ë°ê²¬ë í¨ì¤ëªì
                      ì¤íì´í°ì¤ ì ë³´ ì·¨ëì ì¬ì©íë, ëì²´ glob í¨ìë¡
                      ì´ê¸°íí©ëë¤.

                      void *(*gl_opendir)(const char * name);
                      struct dirent *(*gl_readdir)(void *);
                      void (*gl_closedir)(void *);
                      int (*gl_lstat)(const char *name, struct stat *st);
                      int (*gl_stat)(const char *name, struct stat *st);

                      íì´íì ë³´ì¡´ë ëë í 리ë¡ë¶í°, restore(8) (ì)ê³¼ ê°ì
                      íë¡ê·¸ë¨ì ìí´ ê·¸ë¡ë¹ (íì¼ëª ì ê°) í  ì ìëë¡(ë¯ì´), ì´
                      íì¥ì´ ì¤ë¹ëì´ ììµëë¤.

     GLOB_BRACE       csh(1) (ì)ê³¼ ê°ì ‘{pat, pat,...}’ string를 ì ê°í기
                      ìí´ì, í¨í´ string를 ì¬ì  ì²ë¦¬ í©ëë¤. í¨í´ ‘{}’ (ì)ë ì‐
                      ì¬ì  ì´ì  ( ë° find(1) í¨í´ì ìë ¥ì ì©ì´íê² í기 ìí´ì,
                      csh(1) íì§ë§ ê°ì ê²ì íë¤ê³  íë ì´ì ) (ì¼)ë¡ë¶í°,
                      미ì ê°ì¸ ì± ë¨ê²¨ì§ëë¤.

     GLOB_MAGCHAR     í¨í´ì glob() ì©ìºë¦í°ê° í¬í¨ëì´ ìì¼ë©´(ì), glob() í¨ìì
                      ìí´ ì´ íëê·¸ê° ì¤ì ë©ëë¤. ìì¸í ê²ì gl_matchc 구조체
                      멤ë²ì, ì©ë²ì ëí ì¤ëªì ì°¸ì¡°í´ ì£¼ì¸ì.

     GLOB_NOMAGIC     GLOB_NOCHECK (ì)ê³¼ ê°ìµëë¤ë§, í¹ì ìºë¦í° ``*'', ``? ''
                      ëë ``[''ê° ì무ê²ë í¬í¨ëì§ ìì ê²½ì°ì, ì´ íëê·¸ë ë¤ë§
                      pattern (ì)를 íì ë¶ê°í  ë¿ìëë¤.  GLOB_NOMAGIC (ì)ë, ì‐
                      ì¬ì ì¸ csh(1) ì ìí ê·¸ë¡ë¹ (íì¼ëª ì ê°) ê±°ëì ì¤ì¥ì ë¨ìí
                      í기 ìí´ì ì¤ë¹ëì´ ììµëë¤. ê·¸ ì¸ì 목ì ììë ìë§, ì´ë¤
                      ê²½ì°ë ì¬ì©í´ì¼ íì§ë ììµëë¤.

     GLOB_QUOTE       backslash (‘\’) ìºë¦í°ë¥¼ ì¸ì©ë¶í¸ë¡ì ì í¨íê² í©ëë¤.
                      í¨í´ì backslashì 거기ì ê³ìëë ìºë¦í°ê° ìë ê²½ì°, ê·¸
                      ìºë¦í°ë¥¼ í¹ë³í í´ìíë ì¼ ìì´ ê·¸ëë¡ì ìºë¦í°ë¡ì ì¹íí©ëë¤.

     GLOB_TILDE       ‘~’ ê·¸ë¦¬ê³  ììëë í¨í´ì, ì ì ëªì í ëë í 리ì ì ê°í©ëë¤.

     GLOB_LIMIT       ëë ¤ì£¼ì´ì§ë í¨ì¤ëªì í©ê³ì를, gl_matchc 그리ê³
                      ì§ì ëë ìì ì íí©ëë¤ (ëí´í¸ë ARG_MAX) ìëë¤.  ë§¤ì° í° ìì
                      매ì¹ì ì ê°ëë¤ ‘*/../*/..’ (ì)ê³¼ ê°ì´ 긴 stringì í¨í´ì
                      ìí´, ìë¹ì¤ ê±°ë¶ ê³µê²©ì 무리íê² ëì´ ë²ë¦´ ì ìë
                      íë¡ê·¸ë¨ì ëí´, 본ìµìì ì¤ì í´ì¼ í©ëë¤.

     ê²ìì ëí´ ì¤í ëë ì½ì ì ìë ëë í 리를 ë§ë¬ì ê²½ì°, errfunc íì§ë§ NULL
     (ì´)ê° ìëë©´, glob() í (*errfunc)(path, errno) (ì)를 í¸ì¶í©ëë¤.  ì´ê²ì
     ë¹ì§ê´ì ì¸ ê²½ì°ê° ììµëë¤.  ‘*/Makefile’ (ì)ê³¼ ê°ì í¨í´ììë, ‘foo’ íì§ë§
     ë ë í ê° ìëì´ë ‘foo/Makefile’ ì stat(2) íì§ë§ ìëëì´, errfunc (ì)를
     í¸ì¶íë ê²°ê³¼ê° ë기 ë문ìëë¤.  ENOENT ë° ENOTDIR ì íì¤í¸ì ìí´, ìë¬
     routineë ì´ ëìì ìµì í  ìê° ììµëë¤ë§, ê·¸ë°ë°ë ë ì´ë¬í ê²½ì°ìë GLOB_ERR
     íëê·¸ê° ì¦ì glob() (ì)를 ë¦¬í´ ìíµëë¤.

     errfunc (ì¼)ë¡ë¶í° ë¹ 0 ì´ ëìê°ë©´(ì) glob() (ì)ë ì¡°ìì ì ì§í´, ë²ì¨
     ì í©í ëª¨ë  í¨ì¤ë¥¼ ë°ìí기 ìí´ì, gl_pathc ë° gl_pathv (ì)를 ì¤ì í ë¤ìì
     GLOB_ABEND (ì)를 ëë ¤ì¤ëë¤.  ìë¬ê° ì¼ì´ë flags ì GLOB_ERR íì§ë§ ì¤ì ëì´
     ìì¼ë©´, errfunc (ì)를 í¸ì¶íì ê²½ì° ê·¸ ë°íê°ì ê´ê³ìì´, ê°ì ê²ì´
     ì¼ì´ë©ëë¤.  GLOB_ERR (ì)를 미ì¤ì ì¼ë¡, errfunc íì§ë§ NULL ê°ë§íë
     errfunc íì§ë§ 0 ì ëë ¤ì£¼ìì ê²½ì°, ìë¬ë 무ìë©ëë¤.

     globfree() í¨ìë, ì ì glob() í¸ì¶ì ìí´ pglob (ì)ê³¼ ê´ë ¨í, ëª¨ë  ê³µê°ì
     í´ë°©í©ëë¤.

ë°íê°
     무ì¬íê² ìë£íì ê²½ì° glob() (ì)ë 0 ì ëë ¤ì¤ëë¤. ê²ë¤ê° pglob ì ê° íë ìë
     ë¤ìì ëíë´ë ê°ì´ í¬í¨ë©ëë¤.

     gl_pathc      ì§ê¸ê¹ì§ì ì í© í¨ì¤ëªì í©ê³ìê° í¬í¨ë©ëë¤.  GLOB_APPEND
                   íì§ë§ ì§ì ëì´ ìë ê²½ì°ë, ì ì glob() 기ëì¼ë¡ ì»ì ì ìë ê²
                   ì¸ì ì í© í¨ì¤ëªì ìë, ì´ í©ê³ìë í¨.

     gl_matchc     íì¬ì glob() 기ëì ìí´ ì»ì ì ìë ì í© í¨ì¤ëªì ìê° í¬í¨ë©ëë¤.

     gl_flags      pattern ì í¹ì ìºë¦í° ``*'', ``? '', ëë ``[''ì ì´ë¤ ê²ì¸ê°ê°
                   í¬í¨ëì´ ìë ê²½ì°ë, GLOB_MAGCHAR íì§ë§ ì¤ì í ë¹í¸ë¥¼ ê°ì§ë¤
                   flags íë¼ë¯¸í°ì ì¹´í¼ê° í¬í¨ë©ëë¤. í¹ì ìºë¦í°ê° í¬í¨ëì§ ìì
                   ê²½ì°, ì´ íëì ë´ì©ì í´ë¦¬ì´ ë©ëë¤.

     gl_pathv      ì í© í¨ì¤ëªì NULL ê·¸ë¦¬ê³  ëëë 리ì¤í¸ì í¬ì¸í°ê°
                   í¬í¨ë©ëë¤.  ë¤ë§, ë§ì½ gl_pathc íì§ë§ 0 ì´ë¼ë©´, gl_pathv ì
                   ë´ì©ì ì ìëì§ ììµëë¤.

     ìë¬ì´ê¸° ë문ì ì¢ë£íë©´(ì) glob() í errno (ì)를 ì¤ì í´, ë¤ìì ëíë´ë ë¹ 0
     ì ìì 1 ê°(ì´)ì ëë ¤ì¤ëë¤. ì´ë¬í ì ìë, ì¸í´ë£¨ë íì¼ ⟨glob.h⟩ 그리ê³
     ì ìë©ëë¤.

     GLOB_NOSPACE  ë©ëª¨ë¦¬ í ë¹ì ìëê° ì¤í¨íìµëë¤.  í¹ì errno íì§ë§ 0 ì ê²½ì°,
                   GLOB_LIMIT íì§ë§ flags ë¡ ì§ì ëì´ pglob->gl_matchc ê° ëë
                   ê·¸ ì´ìì í¨í´ì´ ë§¤ì¹ íìµëë¤.

     GLOB_ABEND    ìë¬ê° ë°ìí íì GLOB_ERR íì§ë§ ì¤ì ëì´ ììëì§, ëë (*errfunc)()
                   íì§ë§ ë¹ 0 ì ëë ¤ì£¼ìì¼ë¯ë¡, glob() (ì)ë í¨ì¤ëªì 주ì¬ë¥¼
                   ì ì§íìµëë¤.

     ì¸ì pglob->gl_pathc ë° pglob->gl_pathv (ì)ë ì¬ì í, ììì ì§ì ëë¡ ì¤ì ëëë¡
     ìëë¤.

ì
     ‘ls -l *. c *.h’ ì ëê°ì ë±ê°ë, ë¤ìì ëíë´ë ì½ëë¡ ì·¨ëí  ìê° ììµëë¤.

           glob_t g;

           g.gl_offs = 2;
           glob("*.c", GLOB_DOOFFS, NULL, &g);
           glob("*.h", GLOB_DOOFFS | GLOB_APPEND, NULL, &g);
           g.gl_pathv[0] = "ls";
           g.gl_pathv[1] = "-l";
           execvp("ls", g.gl_pathv);

ê´ë ¨ í목
     sh(1), fnmatch(3), regexp(3)

íì¤
     glob() í¨ììë ë¤ìì ëíë´ë ìì¸ë¥¼ ì ì¸í´, IEEE Std 1003.2 (“POSIX.2”)
     (ì)ê³¼ì í¸íì±ì´ 기ëëê³  ììµëë¤. ìì¸ë íëê·¸ GLOB_ALTDIRFUNC, GLOB_BRACE,
     GLOB_LIMIT, GLOB_MAGCHAR, GLOB_NOMAGIC, GLOB_QUOTE, GLOB_TILDE 거기ì íë
     gl_matchc ë° gl_flags ë±ì, ìì í POSIX ì í©ì ì¸ì°ë ì´í리ì¼ì´ìììë ì¬ì©í´ìë
     ìëë¤ê³  íë ê²ìëë¤.

ìì¬
     glob() ë° globfree() í¨ìë, 4.4BSD ê·¸ë¦¬ê³  ì²ì ë±ì¥íìµëë¤.

ë²ê·¸
     MAXPATHLEN ë³´ë¤ ê¸´ í¨í´ì, 무ê²ì¬ ìë¬ì ìì¸ì´ ë  ê°ë¥ì±ì´ ììµëë¤.

     glob() ì¸ìë ì¤í¨í´, íë¡ê·¸ë¨ ë¼ì´ë¸ë¬ë¦¬ routine stat(2), closedir(3),
     opendir(3), readdir(3), malloc(3), ë° free(3) ì©ì¼ë¡ ì§ì í ìë¬ì ì´ë¤
     ê²ì¸ê°ì, errno 를 ì¤ì íë ì¼ì´ ììµëë¤.