Nebula2探秘01-创建KernelServer&使用log
happykevins文
/**//****************************************************************************/
/**//* 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<nFileServer2> 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
///----------------------------------------------------------------------------
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。