⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kfsaccessjni.cc

📁 nandflash文件系统源代码
💻 CC
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------- -*- Mode: C++ -*-// $Id: KfsAccessJni.cc 172 2008-09-25 22:50:12Z sriramsrao $ //// Created 2007/08/24// Author: Sriram Rao//// Copyright 2008 Quantcast Corp.// Copyright 2007-2008 Kosmix Corp.//// This file is part of Kosmos File System (KFS).//// Licensed under the Apache License, Version 2.0// (the "License"); you may not use this file except in compliance with// the License. You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or// implied. See the License for the specific language governing// permissions and limitations under the License.//// \brief JNI code in C++ world for accesing KFS Client.////----------------------------------------------------------------------------#include <jni.h>#include <string>#include <cstddef>#include <iostream>#include <vector>#include <netinet/in.h>#include <sstream>using std::vector;using std::string;using std::cout;using std::endl;using std::ostringstream;#include <fcntl.h>#include "libkfsClient/KfsClient.h"using namespace KFS;extern "C" {    jlong Java_org_kosmix_kosmosfs_access_KfsAccess_initF(        JNIEnv *jenv, jclass jcls, jstring jpath);    jlong Java_org_kosmix_kosmosfs_access_KfsAccess_initS(        JNIEnv *jenv, jclass jcls, jstring jmetaServerHost, jint metaServerPort);        jint Java_org_kosmix_kosmosfs_access_KfsAccess_cd(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_mkdirs(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_rmdir(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_rmdirs(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jobjectArray Java_org_kosmix_kosmosfs_access_KfsAccess_readdirplus(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jobjectArray Java_org_kosmix_kosmosfs_access_KfsAccess_readdir(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jboolean jpreloadattr);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_remove(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_rename(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring joldpath, jstring jnewpath,        jboolean joverwrite);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_exists(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_isFile(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_isDirectory(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jlong Java_org_kosmix_kosmosfs_access_KfsAccess_filesize(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jobjectArray Java_org_kosmix_kosmosfs_access_KfsAccess_getDataLocation(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jlong jstart, jlong jlen);    jshort Java_org_kosmix_kosmosfs_access_KfsAccess_getReplication(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jshort Java_org_kosmix_kosmosfs_access_KfsAccess_setReplication(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jint jnumReplicas);    jlong Java_org_kosmix_kosmosfs_access_KfsAccess_getModificationTime(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_open(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jstring jmode, jint jnumReplicas);    jint Java_org_kosmix_kosmosfs_access_KfsAccess_create(        JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jint jnumReplicas, jboolean jexclusive);    /* Input channel methods */    jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_read(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jobject buf, jint begin, jint end);    jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_seek(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jlong joffset);    jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_tell(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd);    jint Java_org_kosmix_kosmosfs_access_KfsInputChannel_close(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd);    /* Output channel methods */    jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_write(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jobject buf, jint begin, jint end);    jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_sync(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd);    jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_seek(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd, jlong joffset);    jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_tell(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd);    jint Java_org_kosmix_kosmosfs_access_KfsOutputChannel_close(        JNIEnv *jenv, jclass jcls, jlong jptr, jint jfd);}namespace{    inline void setStr(string & dst, JNIEnv * jenv, jstring src)    {        char const * s = jenv->GetStringUTFChars(src, 0);        dst.assign(s);        jenv->ReleaseStringUTFChars(src, s);    }}jlong Java_org_kosmix_kosmosfs_access_KfsAccess_initF(    JNIEnv *jenv, jclass jcls, jstring jpath){    KfsClientPtr clnt;    string path;    setStr(path, jenv, jpath);    clnt = getKfsClientFactory()->GetClient(path.c_str());    if (!clnt)        return 0;    return (jlong) (clnt.get());}jlong Java_org_kosmix_kosmosfs_access_KfsAccess_initS(    JNIEnv *jenv, jclass jcls, jstring jmetaServerHost, jint metaServerPort){    KfsClientPtr clnt;    string path;    setStr(path, jenv, jmetaServerHost);    clnt = getKfsClientFactory()->GetClient(path, metaServerPort);    if (!clnt)        return 0;    return (jlong) (clnt.get());}    jint Java_org_kosmix_kosmosfs_access_KfsAccess_cd(    JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){    KfsClient *clnt = (KfsClient *) jptr;    string path;    setStr(path, jenv, jpath);    return clnt->Cd(path.c_str());}jint Java_org_kosmix_kosmosfs_access_KfsAccess_mkdirs(    JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){    KfsClient *clnt = (KfsClient *) jptr;    string path;    setStr(path, jenv, jpath);    return clnt->Mkdirs(path.c_str());}jint Java_org_kosmix_kosmosfs_access_KfsAccess_rmdir(    JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){    KfsClient *clnt = (KfsClient *) jptr;    string path;    setStr(path, jenv, jpath);    return clnt->Rmdir(path.c_str());}jint Java_org_kosmix_kosmosfs_access_KfsAccess_rmdirs(    JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){    KfsClient *clnt = (KfsClient *) jptr;    string path;    setStr(path, jenv, jpath);    return clnt->Rmdirs(path.c_str());}jobjectArray Java_org_kosmix_kosmosfs_access_KfsAccess_readdirplus(    JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath){    KfsClient *clnt = (KfsClient *) jptr;    string path;    int res;    jobjectArray jentries;    setStr(path, jenv, jpath);    std::vector<KFS::KfsFileAttr> fattr;    res = clnt->ReaddirPlus(path.c_str(), fattr);    if ((res < 0) || (fattr.size() == 0))        return NULL;    jclass jstrClass = jenv->FindClass("Ljava/lang/String;");    // construct a key value pair of strings for each attribute and    // then unpack in java side.    jentries = jenv->NewObjectArray(fattr.size(), jstrClass, NULL);    for (vector<string>::size_type i = 0; i < fattr.size(); i++) {        ostringstream os;        jstring s;        os << "Filename: " << fattr[i].filename << "\n";        if (fattr[i].isDirectory)            os << "IsDirectory: true" << "\n";        else            os << "IsDirectory: false" << "\n";        os << "Filesize: " << fattr[i].fileSize << "\n";        os << "M-Time: " << ((jlong) fattr[i].mtime.tv_sec) * 1000 << "\n";        os << "Replicas: " << fattr[i].numReplicas << "\n";        s = jenv->NewStringUTF(os.str().c_str());        jenv->SetObjectArrayElement(jentries, i, s);        jenv->DeleteLocalRef(s);    }    return jentries;}jobjectArray Java_org_kosmix_kosmosfs_access_KfsAccess_readdir(    JNIEnv *jenv, jclass jcls, jlong jptr, jstring jpath, jboolean jpreloadattr){    KfsClient *clnt = (KfsClient *) jptr;    string path;    vector<string> entries;    int res;    jstring s;    jobjectArray jentries;    setStr(path, jenv, jpath);    if (jpreloadattr) {        std::vector<KFS::KfsFileAttr> fattr;        res = clnt->ReaddirPlus(path.c_str(), fattr);        if (res == 0) {            for (uint32_t i = 0; i < fattr.size(); i++) {                entries.push_back(fattr[i].filename);            }        }    }    else {        res = clnt->Readdir(path.c_str(), entries);    }    if ((res < 0) || (entries.size() == 0))        return NULL;    jclass jstrClass = jenv->FindClass("Ljava/lang/String;");    jentries = jenv->NewObjectArray(entries.size(), jstrClass, NULL);    for (vector<string>::size_type i = 0; i < entries.size(); i++) {        s = jenv->NewStringUTF(entries[i].c_str());        // std::cout << "Setting: " << i << ' ' << entries[i] << std::endl;        jenv->SetObjectArrayElement(jentries, i, s);        jenv->DeleteLocalRef(s);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -