Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^2: How does compare the relationship between two file system paths in a portable way?

by ELISHEVA (Prior)
on Aug 17, 2009 at 23:14 UTC ( [id://789304]=note: print w/replies, xml ) Need Help??


in reply to Re: How does compare the relationship between two file system paths in a portable way?
in thread How does one compare the relationship between two file system paths in a portable way?

Agreed. I should have been more precise in my scoping of the problem (and have updated my original post accordingly). My particular use cases for this routine involves paths that can be presumed to be real file names. But others interested in a "comparePath" function might have different goals. Even in cases where that assumption can't be made, Perl offers, what I presume is, a portable way to identify symbolic links (-l, for example) so those could easily be filtered out and removed from consideration. Or alternatively one could use a function like readlink to convert the link to its real name. Do you have experiences where readlink and -l have caused problems?

Come to think of it, I don't know how to detect mounts. Is -l also used?

Best, beth

Replies are listed 'Best First'.
Re^3: How does compare the relationship between two file system paths in a portable way?
by JavaFan (Canon) on Aug 17, 2009 at 23:43 UTC
    As long as you remember to do a readlink on all segments of the path, then it may work. As long as there aren't any loops. Loops can make two paths be parents of each other. Note however that it's not forbidden for a Unix filesystem to allow directory *hard*links. Not sure if Perl runs on any system that has a filesystem where that is allowed.

    As for detecting mounts, stat tells you the device number of a file or directory. I don't know how to get, from Perl and in a portable way, a list of mount points.

      Note however that it's not forbidden for a Unix filesystem to allow directory *hard*links. Not sure if Perl runs on any system that has a filesystem where that is allowed.

      You can run Perl on Cygwin. A standard Cygwin installation will always have the equivalent of at least one hardlink.

      Usually the Windows directory that stores the Cygwin root directory will be in the default location C:\cygwin. Under Cygwin, that is mounted as /, but it can also be accessed as /cygdrive/c/cygwin. Both the drive leter (c) and directory name (cygwin) can be changed during installation.
        Note that I didn't just say "hardlinks". I said "directory hardlinks". That is:
        $ mkdir One $ ln -d One Two
        Cygwin allows that?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://789304]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-03-29 06:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found