00001
00002
00003
00004
00005
00006
00007 #ifndef HDFS_LIBRARY_H
00008 #define HDFS_LIBRARY_H
00009
00010 #include <stdio.h>
00011 #include <stdlib.h>
00012 #include <time.h>
00013
00014 #include "int_sizes.h"
00015
00016 #ifndef HDFS_EINTERNAL
00017 #define HDFS_EINTERNAL 255
00018 #endif
00019
00020 typedef INT32_T tSize;
00021 typedef time_t tTime;
00022 typedef INT64_T tOffset;
00023 typedef UINT16_T tPort;
00024
00025 typedef enum tObjectKind {
00026 kObjectKindFile = 'F',
00027 kObjectKindDirectory = 'D',
00028 } tObjectKind;
00029
00030 typedef void *hdfsFS;
00031 typedef void *hdfsFile;
00032
00033 typedef struct {
00034 tObjectKind mKind;
00035 char *mName;
00036 tTime mLastMod;
00037 tOffset mSize;
00038 short mReplication;
00039 tOffset mBlockSize;
00040 char *mOwner;
00041 char *mGroup;
00042 short mPermissions;
00043 tTime mLastAccess;
00044 } hdfsFileInfo;
00045
00046 struct hdfs_library {
00047 void *libjvm_handle;
00048 void *libhdfs_handle;
00049 hdfsFS (*connect) (const char *, tPort);
00050 hdfsFS (*connect_as_user) (const char *, tPort, const char *, const char *[], int);
00051 int (*disconnect) (hdfsFS);
00052 hdfsFileInfo *(*listdir) (hdfsFS, const char *, int *);
00053 hdfsFile (*open) (hdfsFS, const char *, int, int, short, tSize);
00054 int (*close) (hdfsFS, hdfsFile);
00055 int (*flush) (hdfsFS, hdfsFile);
00056 tSize (*read) (hdfsFS, hdfsFile, void *, tSize);
00057 tSize (*pread) (hdfsFS, hdfsFile, tOffset, void *, tSize);
00058 tSize (*write) (hdfsFS, hdfsFile, const void *, tSize);
00059 int (*exists) (hdfsFS, const char *);
00060 int (*mkdir) (hdfsFS, const char *);
00061 int (*unlink) (hdfsFS, const char *, int recursive);
00062 int (*rename) (hdfsFS, const char *, const char *);
00063 hdfsFileInfo *(*stat) (hdfsFS, const char *);
00064 void (*free_stat) (hdfsFileInfo *, int);
00065 char ***(*get_hosts) (hdfsFS, const char *, tOffset, tOffset);
00066 void (*free_hosts) (char ***);
00067 tOffset (*get_default_block_size) (hdfsFS);
00068 tOffset (*get_capacity) (hdfsFS);
00069 tOffset (*get_used) (hdfsFS);
00070 int (*chmod) (hdfsFS, const char *, short);
00071 int (*utime) (hdfsFS, const char *, tTime, tTime);
00072 int (*chdir) (hdfsFS, const char *);
00073 tOffset (*tell) (hdfsFS, hdfsFile);
00074 int (*setrep) (hdfsFS fs, const char *path, UINT16_T nreps );
00075 };
00076
00077 struct hdfs_library *hdfs_library_open();
00078 void hdfs_library_close(struct hdfs_library *hs);
00079
00080 #endif