xiaoy@bullet.ecf (XIAO Yan) (05/29/91)
A otherwise accident freshes my dream of symblic link of fils in MS-DOS. (much like under unix 'ln -s'). When I used chkdsk and I was told two files were cross linked to the same claster. These two files are on the same disk but in different directories and orginally they are different files. After I saw this message I found that, indeed, these two files contained the same contents. I recalled that this happened after I used PCTOOLS to undelete one of the files. So I assume that it is feasible to have symbolic link on MS-DOS. Along the same line, it should also be possible to have cross directory rename command (rather than 'copy-delete' scheme which sometimes is hard to do). I am no expert in FAT stuff. Any comment? Xiao
rjc@oghma.ocunix.on.ca (Robert J Carter) (05/30/91)
In article <1991May29.153829.8742@bullet.ecf.toronto.edu> xiaoy@bullet.ecf (XIAO Yan) writes: >A otherwise accident freshes my dream of symblic link of fils in MS-DOS. >(much like under unix 'ln -s'). > >When I used chkdsk and I was told two files were cross linked to the >same claster. These two files are on the same disk but in different >directories and orginally they are different files. After I saw this >message I found that, indeed, these two files contained the same >contents. > > .... > >So I assume that it is feasible to have symbolic link on MS-DOS. Nope. The reason is this: the FAT and file system do not track links (therefore, they don't exist). When you create a file in DOS, a field in the directory entry for that file points to an entry in the FAT table (The starting cluster that chkdsk referred to). When a file is deleted, the operating system a) marks the directory entry as "erased" by placing hex E5 in the first character position of the file name and b) using the starting cluster information to track the chain of allocated clusters AND MARK THEM AS FREE. Thus, you get to erase two files for the price of one. In the meantime, your other file is now pointing into never-never land (hard disk purgatory ?). Same applies to floppies. >Along >the same line, it should also be possible to have cross directory rename >command (rather than 'copy-delete' scheme which sometimes is hard to do). >I am no expert in FAT stuff. > >Any comment? > >Xiao Yes, you could do a cross-directory rename, with the caveat that you could step in much doggie-do if your machine goes down during the process, although the window would be very small. (I wrote a programme to do this a couple of years ago - god knows where it is now). Basically, this is the procedure: - Open the source directory - Open the destination directory - Read the directory entry for the file to be moved - Write the *IDENTICAL* information into an empty directory entry in the destination directory - Mark the source directory entry as deleted. Please note that I said MARK - DO NOT use the O/S Delete File system calls. - Close the source and destination directories. Note: NO mucking about with the FAT is involved! This is a (all things being relative) simple, 1 to 2 page C programme, using nothing more than open(), close(), read(), and write() calls. I can e-mail you the details if you wish. -- |=================================================================| ttfn! | Robert J Carter Oghma Systems Ottawa, Ontario | | Phone: (613) 565-2840 | @ @ | Fax: (613) 565-2840 (Phone First) rjc@oghma.ocunix.on.ca | * * |=================================================================| \_____/