您的位置:首页 > 其它

Nebula2探秘02-使用FileServer2

2008-06-10 12:27 218 查看
Nebula2探秘01-创建KernelServer&使用loghappykevins文 



/**//****************************************************************************/




/**//*    Nebula2 - Tutorial 02                                                    */




/**//*  使用FileServer2                                                            */




/**//*  author: happykevins                                                        */




/**//****************************************************************************/






/**////----------------------------------------------------------------------------


/// +必要头文件


#include "kernel/nkernelserver.h"


#include "kernel/nfileserver2.h"


#include "kernel/nfile.h"


#include "kernel/nautoref.h"




/**//// -必要头文件


///----------------------------------------------------------------------------




///----------------------------------------------------------------------------


/// +链接库


#pragma comment(lib, "wsock32.lib")


#pragma comment(lib, "d_nkernel.lib")




/**//// -链接库


///----------------------------------------------------------------------------




///----------------------------------------------------------------------------


/// +Application


int main(int argc, const char** argv)




...{




    /**//// 创建KernelServer


    nKernelServer* ks = n_new(nKernelServer);






    /**////----------------------------------------------------------------------------


    /// +获得FileServer2的实例


    /// @note:有以下四种方式。在一般情况下他们是等价的


    nFileServer2* pFileServer = NULL;


    // 1.通过Singleton获得


    pFileServer = nFileServer2::Instance();


    // 2.通过KernelServer直接获得


    pFileServer = ks->GetFileServer();


    // 3.通过NOH体系获得


    pFileServer = (nFileServer2*)ks->Lookup("sys/servers/file2");


    // 4.通过nAutoRef获得(同NOH体系获得法)


    nAutoRef refFileServer("sys/servers/file2");


    if ( refFileServer.isvalid() )




    ...{


        pFileServer = refFileServer.get();


    }




    /**//// -获得FileServer2的实例


    ///----------------------------------------------------------------------------


    


    ks->Print("*****Assigns Operation***** ");




    /**////----------------------------------------------------------------------------


    /// +Assigns


    /// @note:


    ///    1.    Assigns是一种以标识替代绝对路径的技术,它对于应用程序的资源部署非常有用


    ///    2.    Assigns的变量都以nEnv类型存储在NOH体系的/sys/share/assigns/位置下


    ///    3.    /sys/share/assigns/home和/sys/share/assigns/bin是两个默认存在的变量,


    ///        分别是应用程序根和执行文件所在路径。


    /// 4.    在设置完Assign路径后就可以通过"assign:filename"的形式来索引文件了。


    ///


    // 两个默认的assigns


    nString home = pFileServer->GetAssign("home");


    nString bin  = pFileServer->GetAssign("bin");


    nString user = pFileServer->GetAssign("user");


    nString temp = pFileServer->GetAssign("temp");


    ks->Print("home: %s ", home.Get());


    ks->Print("bin : %s ", bin.Get() );


    ks->Print("user: %s ", user.Get());


    ks->Print("temp: %s ", temp.Get());


    // 设置proj索引


    pFileServer->SetAssign("proj", "d:/");


    nString proj = pFileServer->GetAssign("proj");


    ks->Print("proj: %s ", proj.Get());




    /**////


    /// -Assigns


    ///----------------------------------------------------------------------------




    ks->Print("*****File W/R Operation***** ");




    /**////----------------------------------------------------------------------------


    /// +File Operation


    ///




    // get nFile object


    nFile* file = pFileServer->NewFileObject();




    // open file for write


    file->Open("bin:T02.txt", "w");


    // write file


    nString output("T02 FileWriteTest!");


    file->Write(output.Get(), output.Length());


    // close file for write


    file->Close();




    // open file for read


    file->Open("bin:T02.txt", "r");


    // read file content


    char buf[512];


    int readCount = file->Read(buf, sizeof(buf));


    buf[readCount] = 0;


    // log content


    nString absPath = pFileServer->ManglePath("bin:T02.txt");


    ks->Print("Read File from: %s ", absPath.Get());


    ks->Print("File Content: %s", buf);


    // close file for read


    file->Close();




    // release nFile object


    file->Release();






    /**////


    /// -File Operation


    ///----------------------------------------------------------------------------




    /// 销毁KernelServer


    n_delete(ks);




    getchar();


    return 0;


}




/**//// -Application


///----------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: