本文整理汇总了C++中Loader::load方法的典型用法代码示例。如果您正苦于以下问题:C++ Loader::load方法的具体用法?C++ Loader::load怎么用?C++ Loader::load使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Loader
的用法示例。
在下文中一共展示了Loader::load方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main() {
{
Loader<Plugin> l;
std::shared_ptr<Plugin> h = l.load("./testplugin.o");
std::cout << h->next() << std::endl;
std::shared_ptr<Plugin> i = l.load("./testplugin.o");
std::cout << i->next() << std::endl;
}
// unload the triangle library
}
示例2: process_lines
void process_lines(vector<string> & lines)
{
const int nlines = lines.size(); // number of lines
const int n = nlines - 1; // number of input data
if (nlines < 2) {
cout << "number of lines is wrong" << endl;
exit(EXIT_FAILURE);
}
Loader loader; // frontend
Docker docker; // backend
for (int i = 0; i < n; ++i) {
string input = lines[i + 1];
//cout << input << endl;
loader.load(input);
loader.check();
#if 1
vector<string> tokens = loader.get_tokens();
for (unsigned int i = 0; i < tokens.size() - 1; ++i)
cout << tokens[i] << ",";
cout << tokens[tokens.size() - 1];
#endif
cout << endl;
loader.build_complex(docker.complex);
docker.run();
}
}
示例3: entry
/**
* Entry point of loader.
* At first of loop read load instruction json by stdin stream, and launch loader instance.
* At last of loop, write result json for stdout stream.
* @param argc
* @param argv
* @return Exit code of loader.
*/
int entry(int argc, char* argv[]) {
// Read stdin and separate by '\0'.
std::string line;
picojson::object result;
// Create logger.
Logger::Syslog logger;
logger.initialize("loader");
Logger::set_logger_delegate(&logger);
// Load messages.
Message::load("loader_message.json");
Logger::info(LoaderMid::L2001, std::string(LLVM_VERSION_STRING).c_str());
while (std::getline(std::cin, line, '\0')) {
// Convert json string to picojson instance.
picojson::value v;
std::string err = picojson::parse(v, line);
if (!err.empty()) {
Logger::err(LoaderMid::L2003, err.c_str());
}
result = v.get<picojson::object>();
Logger::info(LoaderMid::L2002, line.c_str());
try {
// Make loader.
Loader loader;
// Read information from json.
loader.in_pid = Convert::json2vpid(result.at("pid"));
loader.in_name = result.at("name").get<std::string>();
loader.in_dst_nid = Convert::json2nid(result.at("dst_nid"));
loader.in_src_nid = Convert::json2nid(result.at("src_nid"));
loader.in_src_account = result.at("src_account").get<std::string>();
loader.in_type = result.at("type").get<std::string>();
// Convert arguments.
std::vector<std::string> args;
for (auto& it : result.at("args").get<picojson::array>()) {
args.push_back(it.get<std::string>());
}
// Load.
loader.load(args);
// Show result.
result.insert(std::make_pair("result", picojson::value(0.0)));
result.insert(std::make_pair("root_tid", Convert::vtid2json(loader.out_root_tid)));
std::cout << picojson::value(result).serialize() << '\0';
Logger::info(LoaderMid::L2004, 0, loader.out_root_tid);
} catch(const Error& ex) {
// Show error information.
result.insert(std::make_pair("result", picojson::value(-1.0)));
result.insert(std::make_pair("reason", picojson::value(std::to_string(ex.reason))));
result.insert(std::make_pair("message", picojson::value(ex.mesg)));
result.insert(std::make_pair("llvm_version",
picojson::value(std::string(LLVM_VERSION_STRING))));
std::cout << picojson::value(result).serialize() << '\0';
Logger::warn(LoaderMid::L2005, -1, ex.reason, ex.mesg.c_str());
} catch(const std::exception& ex) {
// Show error information.
result.insert(std::make_pair("result", picojson::value(-1.0)));
result.insert(std::make_pair("reason", picojson::value(std::to_string(-1))));
result.insert(std::make_pair("message", picojson::value(std::string(ex.what()))));
result.insert(std::make_pair("llvm_version",
picojson::value(std::string(LLVM_VERSION_STRING))));
std::cout << picojson::value(result).serialize() << '\0';
Logger::warn(LoaderMid::L2005, -1, -1, ex.what());
} catch (...) {
int errsv = errno;
// Show error information.
result.insert(std::make_pair("result", picojson::value(-1.0)));
result.insert(std::make_pair("reason", picojson::value(std::to_string(-2))));
result.insert(std::make_pair("message",
picojson::value(std::string(std::strerror(errsv)))));
result.insert(std::make_pair("llvm_version",
picojson::value(std::string(LLVM_VERSION_STRING))));
std::cout << picojson::value(result).serialize() << '\0';
Logger::warn(LoaderMid::L2005, -1, -2, std::strerror(errsv));
}
}
return 0;
}
示例4: process_lines
void process_lines(vector<string> & lines)
{
const int nlines = lines.size(); // number of lines
const int n = nlines - 1; // number of input data
if (nlines < 2) {
cout << "number of lines is wrong" << endl;
exit(EXIT_FAILURE);
}
// prints modified CSV title
vector<string> tokens;
tokens = tokenlize(lines[0]);
tokens[18] = "steps_total";
tokens[20] = "sz.n_prt";
tokens[21] = "sz.n_lig";
tokens[22] = "sz.n_tmp";
tokens[23] = "sz.n_rep";
tokens[24] = "sz.prt_npoint";
tokens[25] = "sz.lig_natom";
tokens[26] = "sz.kde_npoint";
tokens[27] = "sz.mcs_nrow";
for (unsigned int i = 0; i < tokens.size() - 1; ++i)
cout << tokens[i] << ",";
cout << tokens[tokens.size() - 1];
cout << endl;
// CSV contents
Loader loader;
for (int i = 0; i < n; ++i) {
string input = lines[i + 1];
//cout << input << endl;
loader.load(input);
loader.check();
#if 1
tokens = loader.get_tokens();
McPara mcpara = loader.get_mcpara();
ComplexSize sz = loader.get_sz();
tokens[18] = num2string(mcpara.steps_total);
tokens[20] = num2string(sz.n_prt);
tokens[21] = num2string(sz.n_lig);
tokens[22] = num2string(sz.n_tmp);
tokens[23] = num2string(sz.n_rep);
tokens[24] = num2string(sz.prt_npoint);
tokens[25] = num2string(sz.lig_natom);
tokens[26] = num2string(sz.kde_npoint);
tokens[27] = num2string(sz.mcs_nrow);
for (unsigned int i = 0; i < tokens.size() - 1; ++i)
cout << tokens[i] << ",";
cout << tokens[tokens.size() - 1];
#endif
cout << endl;
}
}
示例5: spawn
SpawnStatus spawn(const char *path, const char *args, const char *workdir, SecurityLevel secLvl, Pid requesterPid, Pid *outPid, File_t *outStdin, File_t *outStdout, File_t *outStderr, File_t inStdin, File_t inStdout, File_t inStderr)
{
// file of executable
File_t file;
// open input file
if (!findFile(path, &file))
{
klog("unable to open the file: %s, it doesn't exist on PATH directory", path);
return SPAWN_STATUS_IO_ERROR;
}
// detect format
BinaryFormat format = detectFormat(file);
if (format == BF_UNKNOWN)
{
klog("binary has an unknown format: %s", path);
return SPAWN_STATUS_FORMAT_ERROR;
}
// create empty target process
auto targetProc = CreateEmptyProcess(secLvl);
Pid targetPid = GetCreatedProcessID(targetProc);
// apply configuration
ProcessConfiguration configuration;
configuration.sourcePath = (char*) path;
ConfigureProcess(targetProc, configuration);
// create a loader
Loader *loader;
if (format == BF_ELF32) loader = new Elf32Loader(targetProc, file);
//else if (format == BF_ELF64) loader = new Elf64Loader(targetProc, file);
else
{
klog("no loader implementation for binary format %i", format);
return SPAWN_STATUS_FORMAT_ERROR;
}
// setup standard I/O
if (!setupStdio(targetPid, requesterPid, outStdin, outStdout, outStderr, inStdin, inStdout, inStderr)) klog("unable to setup stdio for process %i", targetPid);
// perform loading
uintptr_t entryAddress;
LoaderStatus ldrStat = loader->load(&entryAddress);
SpawnStatus spawnStat = SPAWN_STATUS_UNKNOWN;
if (ldrStat == LS_SUCCESSFUL)
{
// push command line arguments
writeCliArgs(targetProc, args);
// set working directory
SetWorkingDirectoryP(workdir, targetProc);
// attached loaded process
AttachCreatedProcess(targetProc, entryAddress);
// out-set process id
*outPid = targetPid;
spawnStat = SPAWN_STATUS_SUCCESSFUL;
}
else
{
// cancel creation & let kernel clean up
CancelProcessCreation(targetProc);
if (ldrStat == LS_IO_ERROR) spawnStat = SPAWN_STATUS_IO_ERROR;
else if (ldrStat == LS_FORMAT_ERROR) spawnStat = SPAWN_STATUS_FORMAT_ERROR;
else if (ldrStat == LS_MEMORY_ERROR) spawnStat = SPAWN_STATUS_MEMORY_ERROR;
else
{
klog("loader return unknown status on failure %i", ldrStat);
spawnStat = SPAWN_STATUS_UNKNOWN;
}
}
// Close binary file
Close(file);
return spawnStat;
}