lfc_perl

Langue: en

Version: $Date: 2007/02/23 10:03:07 $ (ubuntu - 24/10/10)

Section: 3 (Bibliothèques de fonctions)

NAME

lfc - Perl interface to the LFC

SYNOPSIS

use lfc;
printf "CNS_LIST_BEGIN is %d\n", $lfc::CNS_LIST_BEGIN;

DESCRIPTION

The lfc module permits you to access the LFC client interface from perl programs. The lfc module is a swig wrapping of the standard C interface. For detailed descriptions of each function see the individual man page of each function.

There follows a series of examples of how to use selected functions and how to retrieve the information returned by them: Examples are finding the GUID of an existing entry, listing the replicas of a given GUID and setting and retrieving the comment associated with an entry.

EXAMPLE

 #!/usr/bin/perl -w
 use strict;
 use lfc;
 
 # stat an existing entry in the LFC and print the GUID
 my ($name,$stat,$guid,$res);
 $name = "/grid/dteam/my.test";
 
 $stat = lfcc::new_lfc_filestatg();
 $res = lfc::lfc_statg($name,undef,$stat);
 
 if ($res == 0) {
   $guid = lfcc::lfc_filestatg_guid_get($stat);
   print "The GUID for $name is $guid\n";
 } else {
   my $err_num = $lfc::serrno;
   my $err_string = lfc::sstrerror($err_num);
   print "There was an error while looking for $name: Error $err_num ($err_string)\n";
   exit(1);
 }
 lfcc::delete_lfc_filestatg($stat);
 

EXAMPLE

 #!/usr/bin/perl -w
 use strict;
 use lfc;
 
 # list the replicas of a given entry, starting from the GUID
 my ($guid,$listp,$flag,$num_replicas);
 $guid = "6a3164e0-a4d7-4abe-9f76-e3b8882735d1";
 
 $listp = lfcc::new_lfc_list();
 $flag =  $lfc::CNS_LIST_BEGIN;
 
 print "Listing replicas for GUID $guid:\n";
 
 $num_replicas=0;
 
 while(1) {
   my $res = lfc::lfc_listreplica(undef,$guid,$flag,$listp);
   $flag = $lfc::CNS_LIST_CONTINUE;
 
   if (!defined $res) {
     last;
   } else {
     my $rep_name = lfcc::lfc_filereplica_sfn_get($res);
     print "Replica: $rep_name\n";
     $num_replicas++;
   }
 }
 lfc::lfc_listreplica(undef,$guid,$lfc::CNS_LIST_END,$listp);
 lfcc::delete_lfc_list($listp);
 
 print "Found $num_replicas replica(s)\n";
 

EXAMPLE

 #!/usr/bin/perl -w
 use strict;
 use lfc;
 
 # setting and retrieving a comment on a file
 my ($file,$res,$bufspec,$buffer,$comment);
 $file = "/grid/dteam/my.test";
 
 $comment = "MyComment";
 $res = lfc::lfc_setcomment($file,$comment);
 
 if ($res != 0) {
   my $err_num = $lfc::serrno;
   my $err_string = lfc::sstrerror($err_num);
   print "Problem while setting comment for $file: Error $err_num ($err_string)\n";
   exit(1);
 }
   
 $bufspec =  "x".($lfc::CA_MAXCOMMENTLEN+1);
 $buffer = pack($bufspec);
 $res = lfc::lfc_getcomment($file,$buffer);
 
 if ($res != 0) {
   my $err_num = $lfc::serrno;
   my $err_string = lfc::sstrerror($err_num);
   print "Problem while reading the comment for $file: Error $err_num ($err_string)\n";
   exit(1);
 }
 
 $comment = unpack("Z*", $buffer);
 print "Read back comment $comment\n";
 

NOTES

The current interface to the lfc_getcomment(3), lfc_getcwd(3), lfc_readlink(3), lfc_seterrbuf(3) requires the passing of a suitably allocated buffer (in a similar way to the C functions). However this is rather non standard in PERL. A future version of lfc perl interface may do away with the need to setup the buffer before the call and to explicitly unpack the result afterwards.

SEE ALSO

LFC C interface man pages