linux - Why does glob lstat matching entries? -


looking behavior in this question, surprised see perl lstat()s every path matching glob pattern:

$ mkdir dir $ touch dir/{foo,bar,baz}.txt   $ strace -e trace=lstat perl -e 'say $^v; <dir/b*>'  v5.10.1 lstat("dir/baz.txt", {st_mode=s_ifreg|0664, st_size=0, ...}) = 0 lstat("dir/bar.txt", {st_mode=s_ifreg|0664, st_size=0, ...}) = 0 

i see same behavior on linux system glob(pattern) , <pattern>, , later versions of perl.

my expectation globbing opendir/readdir under hood, , not need inspect actual pathnames searching.

what purpose of lstat? affect glob()s return?

this strange behavior has been noticed before on perlmonks. turns out glob calls lstat support glob_mark flag, has effect that:

each pathname directory matches pattern has slash appended.

to find out whether directory entry refers subdir, need stat it. apparently done when flag not given.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -