📄 kfsaccessjni.cc
字号:
} return jentries;}jint Java_org_kosmix_kosmosfs_access_KfsAccess_open( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jstring jmode, jint jnumReplicas){ KfsClient *clnt = (KfsClient *) jptr; string path, mode; int openMode = 0; setStr(path, jenv, jpath); setStr(mode, jenv, jmode); if ((mode == "r") || (mode == "rw")) openMode = O_RDWR; else if (mode == "w") openMode = O_WRONLY|O_CREAT; else if (mode == "a") openMode = O_WRONLY | O_APPEND; return clnt->Open(path.c_str(), openMode, jnumReplicas);}jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_close( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd){ KfsClient *clnt = (KfsClient *) jptr; return clnt->Close(jfd);}jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_close( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd){ KfsClient *clnt = (KfsClient *) jptr; return clnt->Close(jfd);}jint Java_org_kosmix_kosmosfs_access_KfsAccess_create( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jint jnumReplicas, jboolean jexclusive){ KfsClient *clnt = (KfsClient *) jptr; string path; setStr(path, jenv, jpath); return clnt->Create(path.c_str(), jnumReplicas, jexclusive);}jint Java_org_kosmix_kosmosfs_access_KfsAccess_remove( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){ KfsClient *clnt = (KfsClient *) jptr; string path; setStr(path, jenv, jpath); return clnt->Remove(path.c_str());}jint Java_org_kosmix_kosmosfs_access_KfsAccess_rename( JNIEnv *jenv, jclass jcls, jlong jptr, jstring joldpath, jstring jnewpath, jboolean joverwrite){ KfsClient *clnt = (KfsClient *) jptr; string opath, npath; setStr(opath, jenv, joldpath); setStr(npath, jenv, jnewpath); return clnt->Rename(opath.c_str(), npath.c_str(), joverwrite);}jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_sync( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd){ KfsClient *clnt = (KfsClient *) jptr; return clnt->Sync(jfd);}jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_seek( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jlong joffset){ KfsClient *clnt = (KfsClient *) jptr; return clnt->Seek(jfd, joffset);}jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_tell( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd){ KfsClient *clnt = (KfsClient *) jptr; return clnt->Tell(jfd);}jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_seek( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jlong joffset){ KfsClient *clnt = (KfsClient *) jptr; return clnt->Seek(jfd, joffset);}jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_tell( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd){ KfsClient *clnt = (KfsClient *) jptr; return clnt->Tell(jfd);}jint Java_org_kosmix_kosmosfs_access_KfsAccess_exists( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){ KfsClient *clnt = (KfsClient *) jptr; string path; setStr(path, jenv, jpath); if (clnt->Exists(path.c_str())) return 1; return 0;}jint Java_org_kosmix_kosmosfs_access_KfsAccess_isFile( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){ KfsClient *clnt = (KfsClient *) jptr; string path; setStr(path, jenv, jpath); if (clnt->IsFile(path.c_str())) return 1; return 0;}jint Java_org_kosmix_kosmosfs_access_KfsAccess_isDirectory( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){ KfsClient *clnt = (KfsClient *) jptr; string path; setStr(path, jenv, jpath); if (clnt->IsDirectory(path.c_str())) return 1; return 0;}jlong Java_org_kosmix_kosmosfs_access_KfsAccess_filesize( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){ KfsClient *clnt = (KfsClient *) jptr; struct stat result; string path; setStr(path, jenv, jpath); if (clnt->Stat(path.c_str(), result) != 0) return -1; return result.st_size;}jlong Java_org_kosmix_kosmosfs_access_KfsAccess_getModificationTime( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){ KfsClient *clnt = (KfsClient *) jptr; struct stat result; string path; setStr(path, jenv, jpath); if (clnt->Stat(path.c_str(), result) != 0) return -1; // The expected return value is in ms return ((jlong) result.st_mtime) * 1000;}jobjectArray Java_org_kosmix_kosmosfs_access_KfsAccess_getDataLocation( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jlong jstart, jlong jlen){ KfsClient *clnt = (KfsClient *) jptr; string path; // for each block, there could be multiple locations due to replication; return them all here vector< vector<string> > entries; int res; jstring s; jobjectArray jentries; setStr(path, jenv, jpath); res = clnt->GetDataLocation(path.c_str(), jstart, jlen, entries); if ((res < 0) || (entries.size() == 0)) return NULL; jclass jstrArrClass = jenv->FindClass("[Ljava/lang/String;"); jclass jstrClass = jenv->FindClass("Ljava/lang/String;"); // For each block, return its location(s) jentries = jenv->NewObjectArray(entries.size(), jstrArrClass, NULL); for (vector<string>::size_type i = 0; i < entries.size(); i++) { jobjectArray jlocs = jenv->NewObjectArray(entries[i].size(), jstrClass, NULL); for (vector<string>::size_type j = 0; j < entries[i].size(); j++) { s = jenv->NewStringUTF(entries[i][j].c_str()); jenv->SetObjectArrayElement(jlocs, j, s); jenv->DeleteLocalRef(s); } jenv->SetObjectArrayElement(jentries, i, jlocs); jenv->DeleteLocalRef(jlocs); } return jentries;}jshort Java_org_kosmix_kosmosfs_access_KfsAccess_getReplication( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){ KfsClient *clnt = (KfsClient *) jptr; string path; setStr(path, jenv, jpath); return clnt->GetReplicationFactor(path.c_str());}jshort Java_org_kosmix_kosmosfs_access_KfsAccess_setReplication( JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jint jnumReplicas){ KfsClient *clnt = (KfsClient *) jptr; string path; setStr(path, jenv, jpath); return clnt->SetReplicationFactor(path.c_str(), jnumReplicas);}jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_read( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jobject buf, jint begin, jint end) { KfsClient *clnt = (KfsClient *) jptr; if(!buf) return 0; void * addr = jenv->GetDirectBufferAddress(buf); jlong cap = jenv->GetDirectBufferCapacity(buf); if(!addr || cap < 0) return 0; if(begin < 0 || end > cap || begin > end) return 0; addr = (void *)(uintptr_t(addr) + begin); ssize_t sz = clnt->Read((int) jfd, (char *) addr, (size_t) (end - begin)); return (jint)sz;}jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_write( JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jobject buf, jint begin, jint end) { KfsClient *clnt = (KfsClient *) jptr; if(!buf) return 0; void * addr = jenv->GetDirectBufferAddress(buf); jlong cap = jenv->GetDirectBufferCapacity(buf); if(!addr || cap < 0) return 0; if(begin < 0 || end > cap || begin > end) return 0; addr = (void *)(uintptr_t(addr) + begin); ssize_t sz = clnt->Write((int) jfd, (const char *) addr, (size_t) (end - begin)); return (jint)sz;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -