Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^4: Perl command to Create/Remove windows link

by bulk88 (Priest)
on Aug 01, 2012 at 06:34 UTC ( [id://984706]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Perl command to Create/Remove windows link
in thread Perl command to Create/Remove windows link

Small amount of work, just 1 function call on NT 5, http://msdn.microsoft.com/en-us/library/windows/desktop/aa363860%28v=vs.85%29.aspx. Use a CPAN module Win32::HardLink as mentioned in the thread, no need to reinvent the wheel. On NT4, there is a method using BackupWrite() which is public API, or go use Native API (only 4 function calls, see http://doxygen.reactos.org/df/d8e/hardlink_8c_source.html#l00024), but that is alot of work and definitely not easy, personal experience. Native API gives you the all the power, buttons, gauges and dials of pre-SCADA nuclear reactor, along with the learning curve of operating it.
  • Comment on Re^4: Perl command to Create/Remove windows link

Replies are listed 'Best First'.
Re^5: Perl command to Create/Remove windows link
by BrowserUk (Patriarch) on Aug 01, 2012 at 07:52 UTC
    Small amount of work, just 1 function call on NT 5,

    Just one function call eh? I'll believe it when I see it working.

    You might want to take a look in lnw.cpp

    Use a CPAN module Win32::HardLink as mentioned in the thread, no need to reinvent the wheel.

    Accept it doesn't work:

    C:\test>dir /b pete* File Not Found C:\test>mklink /h pete.exe \perl64\bin\perl.exe Hardlink created for pete.exe <<===>> \perl64\bin\perl.exe C:\test>pete -v This is perl, v5.10.1 built for MSWin32-x64-multi-thread [snip] C:\test>del pete.exe C:\test>perl -MWin32::Hardlink -E"say link( 'pete.exe', '\\perl64\\bin +\\perl.exe' )" CreateHardLink( "\perl64\bin\perl.exe", "pete.exe" ) failed with error + 2. 0 C:\test>pete -v 'pete' is not recognized as an internal or external command, operable program or batch file.

    Win32::Symlink works after a fashion, but looking at the code that underlies it, I wouldn't want to rely upon it.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    The start of some sanity?

        First, the op ask for hardlinks not symbolic, so the proper function call would be CreateHardLink().

        Second, whilst those two function calls 'do the job'; as coded in the stackoverflow link; they don't handle UNC or MBCS pathnames -- which is one of their major uses -- and they are far from robustly coded. By the time you've fixed that code up to map ansi link names to unc/mbcs paths; cleaned up the error handling; perhaps added in a few checks for self-referential and circular links; you are way beyond 1 function call. And then you've got to test it and maintain it. And all to replicate an OS command. Why?

        Third, those APIs only exist on Vista or Server 200X or later. I strongly suspect that the main reason the OP was looking for a module to do hardlinks -- rather than just shelling out to mklink as also suggested at the bottom of your stackoverflow link -- is because he wants the functionality on earlier version of the OS where those APIs do not exist. That -- to me -- is the only logical reason for not using the command.

        And there are supported tools around for doing some kinds of path linking on earlier OS versions.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        The start of some sanity?

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (5)
As of 2024-04-25 14:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found