This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Emulating hard links on FAT et al.


A hard link is made to a file on disk, whereas a symbolic link is made to
a directory entry.  Once a hard link is made, it's indistinguishable from
the original file.  Essentially, *each* directory entry is a hard link to
the contents of the corresponding file, and the link count of any hard
link to the same file should reflect the total number of hard links.
Also, deleting one hard link does not result in the deletion of the file
-- the file is only deleted when all of the corresponding hard links have
been removed (incidentally, that's why the remove operation in Unix is
performed by an unlink() system call).
Another, less taxing property of hard links is that the inode number of
all hard links to the same file is the same.

The closest FAT comes to the notion of true hard links are cross-linked
files, and those are illegal.  Frankly, I think it would be a very hard
problem to implement a reasonable emulation of hard links without
filesystem support (e.g., on FAT).  FWIW, here are a couple of ideas
(brainstorm-style, hope they are helpful):

1) If hard links are implemented as just another type of symlink, then
every unlink() call will need to enumerate all of the other "hard links"
to the file, move the file to one of those names, and then change all the
others to point to the new location of the file.  This would really slow
down every unlink() call, AFAICS.

2) Alternatively, upon creating the first hard link the file could be
renamed to some internal name (that should be invisible via Cygwin), and
the original name will also become a "hard link".  This way, the unlink
code will not have to be changed, but all of the relevant file and
directory handling code will need to be "taught" to ignore those special
names.

In both cases, the inode computation code in all incarnations of stat()
will need to be changed to dereference a "hard link" and compute the inode
number of the original file.  Also, at least the open() system call
(possibly others) will need to be changed to get to the correct file.

HTH,
	Igor

On Tue, 20 Apr 2004, Buchbinder, Barry (NIH/NIAID) wrote:

> If you do this, remember that it shouldn't be limited to FAT file systems.
> Even though one's version of Windows may be capable of making hard links,
> one may not have the permission level (Administrator) to do so.
>
> But I'm not sure that I see the point of emulating hard links.  It seems to
> me that you are just making a second type of symbolic link.  Is there
> anything that the emulated hard link could do that the ordinary symbolic
> link cannot?  (Sorry if this is a question with an obvious answer.  I
> haven't had more than fleeting access to a system that would allow me to
> make hard links since 1988).
>
> -----Original Message-----
> From: A. Alper Atici
> Sent: Monday, April 19, 2004 5:52 PM
> To: cygwin<at>cygwin<dot>com
> Subject: RFI: Emulating hard links on FAT et al.
>
> Hello,
>
> I've been pondering over the prospects of emulating hard links for
> some time. List archives don't show much about it, and I have not come
> across any similar open implementation on the net.
>
> My rudimentary idea of emulating hard links is based on employing a
> new type of windows shortcut which will be regarded as a hardlinking
> file, rather than a symlink, by Cygwin. For this, I hope to figure out
> a possible combination in the magic bitvector byte(word?) in shortcut
> header. Any comments? How about 0x1c?
> --
> A. Alper Atici               OpenPGP KeyID: 0xB824F550

-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"I have since come to realize that being between your mentor and his route
to the bathroom is a major career booster."  -- Patrick Naughton

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]