static public Method

File.readlink(p1)

File.readlink(link_name)  file_name

Returns the name of the file referenced by the given link. Not available on all platforms.

File.symlink("testfile", "link2test")   #=> 0
File.readlink("link2test")              #=> "testfile"

Source Code

/*
*  call-seq:
*     File.readlink(link_name) -> file_name
*  
*  Returns the name of the file referenced by the given link.
*  Not available on all platforms.
*     
*     File.symlink("testfile", "link2test")   #=> 0
*     File.readlink("link2test")              #=> "testfile"
*/

static VALUE
rb_file_s_readlink(klass, path)
   VALUE klass, path;
{
#ifdef HAVE_READLINK
   char *buf;
   int size = 100;
   int rv;
   VALUE v;

   SafeStringValue(path);
   buf = xmalloc(size);
   while ((rv = readlink(RSTRING(path)->ptr, buf, size)) == size
#ifdef _AIX
           || (rv < 0 && errno == ERANGE) /* quirky behavior of GPFS */
#endif
       ) {
       size *= 2;
       buf = xrealloc(buf, size);
   }
   if (rv < 0) {
       free(buf);
       rb_sys_fail(RSTRING(path)->ptr);
   }
   v = rb_tainted_str_new(buf, rv);
   free(buf);

   return v;
#else
   rb_notimplement();
   return Qnil;                /* not reached */
#endif
}
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.