ROOT logo
// @(#)root/rfio:$Id: TRFIOFile.h 21387 2007-12-15 10:56:08Z rdm $
// Author: Fons Rademakers  20/01/99 + Giulia Taurelli  29/06/2006

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TRFIOFile
#define ROOT_TRFIOFile

///////////////////////////////////////////////////////////////////////////
//                                                                       //
// TRFIOFile                                                             //
//                                                                       //
// A TRFIOFile is like a normal TFile except that it reads and writes    //
// its data via a rfiod server (for more on the rfiod daemon see         //
// http://wwwinfo.cern.ch/pdp/serv/shift.html). TRFIOFile file names     //
// are in standard URL format with protocol "rfio". The following are    //
// valid TRFIOFile URL's:                                                //
//                                                                       //
//    rfio:/afs/cern.ch/user/r/rdm/galice.root                           //
//         where galice.root is a symlink of the type /shift/.../...     //
//    rfio:na49db1:/data1/raw.root                                       //
//    rfio:/castor/cern.ch/user/r/rdm/test.root                          //
//                                                                       //
// If Castor 2.1 is used the file names can be given also in the         //
// following ways:                                                       //
//                                                                       //
//  rfio://host:port/?path=FILEPATH                                      //
//  rfio://host/?path=FILEPATH                                           //
//  rfio:///castor?path=FILEPATH                                         //
//  rfio://stager_host:stager_port/?path=/castor/cern.ch/user/r/         //
//    rdm/bla.root&svcClass=MYSVCLASS&castorVersion=MYCASTORVERSION      //
//  rfio://stager_host/?path=/castor/cern.ch/user/r/                     //
//    rdm/bla.root&svcClass=MYSVCLASS&castorVersion=MYCASTORVERSION      //
//  rfio:///castor?path=/castor/cern.ch/user/r/                          //
//    rdm/bla.root&svcClass=MYSVCLASS&castorVersion=MYCASTORVERSION      //
//                                                                       //
// path is mandatory as parameter but all the other ones are optional.   //
//                                                                       //
// For the ultimate description of supported urls see:                   //
//    https://twiki.cern.ch/twiki/bin/view/FIOgroup/RfioRootTurl         //
//                                                                       //
///////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TFile
#include "TFile.h"
#endif
#ifndef ROOT_TSystem
#include "TSystem.h"
#endif


class TRFIOFile : public TFile {

private:
   TRFIOFile() { }

   // Interface to basic system I/O routines
   Int_t    SysOpen(const char *pathname, Int_t flags, UInt_t mode);
   Int_t    SysClose(Int_t fd);
   Int_t    SysRead(Int_t fd, void *buf, Int_t len);
   Int_t    SysWrite(Int_t fd, const void *buf, Int_t len);
   Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence);
   Int_t    SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime);
   Int_t    SysSync(Int_t) { /* no fsync for RFIO */ return 0; }
   Bool_t   ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf);

public:
   TRFIOFile(const char *url, Option_t *option="",
             const char *ftitle="", Int_t compress=1);
   ~TRFIOFile();

   Int_t   GetErrno() const;
   void    ResetErrno() const;

   ClassDef(TRFIOFile,1)  //A ROOT file that reads/writes via a rfiod server
};


class TRFIOSystem : public TSystem {

private:
   void    *fDirp;   // directory handler

   void    *GetDirPtr() const { return fDirp; }

public:
   TRFIOSystem();
   virtual ~TRFIOSystem() { }

   Int_t       MakeDirectory(const char *name);
   void       *OpenDirectory(const char *name);
   void        FreeDirectory(void *dirp);
   const char *GetDirEntry(void *dirp);
   Int_t       GetPathInfo(const char *path, FileStat_t &buf);
   Bool_t      AccessPathName(const char *path, EAccessMode mode);
   Int_t       Unlink(const char *path);

   ClassDef(TRFIOSystem,0)  // Directory handler for RFIO
};

#endif
 TRFIOFile.h:1
 TRFIOFile.h:2
 TRFIOFile.h:3
 TRFIOFile.h:4
 TRFIOFile.h:5
 TRFIOFile.h:6
 TRFIOFile.h:7
 TRFIOFile.h:8
 TRFIOFile.h:9
 TRFIOFile.h:10
 TRFIOFile.h:11
 TRFIOFile.h:12
 TRFIOFile.h:13
 TRFIOFile.h:14
 TRFIOFile.h:15
 TRFIOFile.h:16
 TRFIOFile.h:17
 TRFIOFile.h:18
 TRFIOFile.h:19
 TRFIOFile.h:20
 TRFIOFile.h:21
 TRFIOFile.h:22
 TRFIOFile.h:23
 TRFIOFile.h:24
 TRFIOFile.h:25
 TRFIOFile.h:26
 TRFIOFile.h:27
 TRFIOFile.h:28
 TRFIOFile.h:29
 TRFIOFile.h:30
 TRFIOFile.h:31
 TRFIOFile.h:32
 TRFIOFile.h:33
 TRFIOFile.h:34
 TRFIOFile.h:35
 TRFIOFile.h:36
 TRFIOFile.h:37
 TRFIOFile.h:38
 TRFIOFile.h:39
 TRFIOFile.h:40
 TRFIOFile.h:41
 TRFIOFile.h:42
 TRFIOFile.h:43
 TRFIOFile.h:44
 TRFIOFile.h:45
 TRFIOFile.h:46
 TRFIOFile.h:47
 TRFIOFile.h:48
 TRFIOFile.h:49
 TRFIOFile.h:50
 TRFIOFile.h:51
 TRFIOFile.h:52
 TRFIOFile.h:53
 TRFIOFile.h:54
 TRFIOFile.h:55
 TRFIOFile.h:56
 TRFIOFile.h:57
 TRFIOFile.h:58
 TRFIOFile.h:59
 TRFIOFile.h:60
 TRFIOFile.h:61
 TRFIOFile.h:62
 TRFIOFile.h:63
 TRFIOFile.h:64
 TRFIOFile.h:65
 TRFIOFile.h:66
 TRFIOFile.h:67
 TRFIOFile.h:68
 TRFIOFile.h:69
 TRFIOFile.h:70
 TRFIOFile.h:71
 TRFIOFile.h:72
 TRFIOFile.h:73
 TRFIOFile.h:74
 TRFIOFile.h:75
 TRFIOFile.h:76
 TRFIOFile.h:77
 TRFIOFile.h:78
 TRFIOFile.h:79
 TRFIOFile.h:80
 TRFIOFile.h:81
 TRFIOFile.h:82
 TRFIOFile.h:83
 TRFIOFile.h:84
 TRFIOFile.h:85
 TRFIOFile.h:86
 TRFIOFile.h:87
 TRFIOFile.h:88
 TRFIOFile.h:89
 TRFIOFile.h:90
 TRFIOFile.h:91
 TRFIOFile.h:92
 TRFIOFile.h:93
 TRFIOFile.h:94
 TRFIOFile.h:95
 TRFIOFile.h:96
 TRFIOFile.h:97
 TRFIOFile.h:98
 TRFIOFile.h:99
 TRFIOFile.h:100
 TRFIOFile.h:101
 TRFIOFile.h:102
 TRFIOFile.h:103
 TRFIOFile.h:104
 TRFIOFile.h:105
 TRFIOFile.h:106
 TRFIOFile.h:107