Lets say, We have two files testfile123 and testfile456
#touch testfile123
#touch testfile456
#unalias mv
#mv testfile123 testfile456
strace shows this:
access("testfile456", W_OK) = 0
rename("testfile123", "testfile456") = 0
------------------------------
Lets say, we have two hard links
#touch testfile
#ln testfile testfile_hlink1
#ln testfile testfile_hlink2
#mv testfile_hlink1 testfile_hlink2
access("test_hlink1", W_OK) = 0
unlink("test_hlink2") = 0
---------------------------------
So, in case of hardlink, rename system call itself is not called at all (as it is the same file and moving contents from one hardlink to another does not make sense).
man 2 rename :
If oldpath and newpath are existing hard links referring to the same
file, then rename() does nothing, and returns a success status.
Thanks to Aravinda for pointing me this.
No comments:
Post a Comment