[Info-vax] Looking for documentation for programming with symlinks

John Reagan xyzzy1959 at gmail.com
Sat Nov 9 11:41:47 EST 2019


On Friday, November 8, 2019 at 7:34:50 PM UTC-5, John E. Malmberg wrote:
> On 11/8/2019 10:13 AM, John Reagan wrote:
> > On Friday, November 8, 2019 at 9:04:57 AM UTC-5, John E. Malmberg wrote:
> >> Hello,
> >>
> >> I am looking for documentation on programming symlinks using system
> >> services.
> >>
> >> Particularly the usages of:
> >>
> >> ATR$C_SYMLINK
> >> ATR$S_SYMLINK
> >>
> >> FAB$C_SYMLINK
> >> FAB$C_SYMBOLIC_LINK
> >>
> >> naml$v_symlink_in_path
> >> naml$v_object_symlink
> >>
> >> I think I can figure most of it out by looking at the header files
> >> generated by SDL.
> >>
> >> Regards,
> >> -John
> >> wb8tyw at qsl.net_work
> > 
> > The ATR$ symbols are the F11XQP file attribute for a symlink.  The
> > FAB$ ones are for creating/accessing a symlink.  For the NAML$ bits,
> > I searched ALL the listings on a full Itanium build disk and found no
> > uses of SYMLNK_IN_PATH at all.  For OBJECT_SYMLINK, I found one place
> > in the CRTL that looks at it, but I found zero places that set it.
> 
> While something in the CRTL has to check if a file is a symlink for the 
> difference in stat or lstat.
> 
> In my case I need to check if the file is a symlink, and if it is, I 
> have to check to see if the symlink is to a directory.
> 
> I am already using sys$parse and sys$search to see if the file or link 
> exists, so I am trying to get the additional information as efficiently 
> as possible.
> 
> Regards,
> -John

Well, from POSIX, you'd call lstat() on the file and check the returned mode in the stat buffer to see if S_IFLNK.  That's what most of the ACRTL does and what any other program should do.

If you want the VMS behind-the-scenes approach (and what the CRTL uses at the bottom), open a channel, use a $QIO to get the IO$_ACCESS file characteristics longword (you'll need a FIB and an attribute list asking for ATR$C_RECATTR) and look at

      8   67497                                 /*
      8   67498                                 **  Check for a symbolic link file
      8   67499                                 */
      8   67500                                 if ( (recattr.fat$v_fileorg == FAT$C_SPECIAL) &&
      8   67501                                      (recattr.fat$b_special_type == FAT$C_SYMBOLIC_LINK) )
 



More information about the Info-vax mailing list