Reads and writes its data via the HDFS protocols

A THDFSFile is like a normal TFile except that it reads and writes
its data via the HDFS protocols. For more information on HDFS, see
This implementation interfaces with libhdfs, which is a JNI-based
library (i.e., it will start a Java JVM internally the first time
it is called). At a minimum, you will need your environment's
$CLASSPATH variable set up properly to use. Here's an example of
one way to properly set your classpath, assuming you use the OSG
distribution of Hadoop:
    $ source $HADOOP_CONF_DIR/
Additionally, you will need a valid libjvm in your $LD_LIBRARY_PATH
This is usually found in either:
This file can only be used if hdfs support is compiled into ROOT.
The HDFS URLs follow the Hadoop notation and should be of the form:
Any host or port information will be ignored; this is taken from the
node's HDFS configuration files.

Example HDFS URLs:

class THDFSFile : public TFile

THDFSSystem : public TSystem



   void     *fHdfsFH;    ///< HDFS file handle
   void     *fFS;        ///< HDFS user handle
   Long64_t  fSize;      ///< File size
   Long64_t  fSysOffset; ///< Seek offset in file
   TUrl      fUrl;       ///< HDFS url
   TString   fPath;      ///< HDFS path

   Int_t    SysOpen(const char *pathname, Int_t flags, UInt_t mode);/// Open a file in HDFS.
   Int_t    SysClose(Int_t fd);/// Close the file in HDFS.
   Int_t    SysRead(Int_t fd, void *buf, Int_t len);
/// Read specified number of bytes from current offset into the buffer.
/// See documentation for TFile::SysRead().   
   Int_t    SysWrite(Int_t fd, const void *buf, Int_t len);
/// Write a buffer into the file; this is not supported currently.   
   Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence);
/// Seek to a specified position in the file.  See TFile::SysSeek().
/// Note that THDFSFile does not support seeks when the file is open for write.   
   Int_t    SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime);
/// Perform a stat on the HDFS file; see TFile::SysStat().

   Int_t    SysSync(Int_t fd);

   THDFSFile(const char *path, Option_t *option="",
             const char *ftitle="", Int_t compress=1);/// Usual Constructor.  See the TFile constructor for details.
   virtual ~THDFSFile();

   void ResetErrno() const;


   void  *fFH;           ///< HDFS filesystem handle.
   void  *fDirp;         ///< Pointer to the array of file information.
   TUrl  *fUrlp;         ///< Pointer to the array of directory content URLs.
   Int_t  fDirEntries;   ///< The number of entries in the fDirp array.
   Int_t  fDirCtr;       ///< The current position in the fDirp array.

    virtual ~THDFSSystem() { }

    Int_t       MakeDirectory(const char *name);/// Make a directory.
    void       *OpenDirectory(const char *name);
/// Open a directory via hdfs. Returns an opaque pointer to a dir
/// structure. Returns 0 in case of error.	
    void        FreeDirectory(void *dirp);
    const char *GetDirEntry(void *dirp);
    Int_t       GetPathInfo(const char *path, FileStat_t &buf);
/// Get info about a file. Info is returned in the form of a FileStat_t
/// structure (see TSystem.h).
/// The function returns 0 in case of success and 1 if the file could
/// not be stat'ed.	
    Bool_t      AccessPathName(const char *path, EAccessMode mode);
/// Returns FALSE if one can access a file using the specified access mode.
/// Mode is the same as for the Unix access(2) function.
/// Attention, bizarre convention of return value!!	
    Int_t       Unlink(const char *path);
/// Unlink, i.e. remove, a file or directory. Returns 0 when successful,
/// -1 in case of failure.