std::string proc_cmdline(const proc_t* proc_info) { std::string attr; std::string result; attr = proc_attr("cmdline", proc_info); std::ifstream fd(attr, std::ios::in | std::ios::binary); if (fd) { result = std::string(std::istreambuf_iterator<char>(fd), std::istreambuf_iterator<char>()); } return result; }
std::map<std::string, std::string> proc_env(const proc_t* proc_info) { std::map<std::string, std::string> env; std::string attr = proc_attr("environ", proc_info); std::string buf; std::ifstream fd(attr, std::ios::in | std::ios::binary); while (!(fd.fail() || fd.eof())) { std::getline(fd, buf, '\0'); size_t idx = buf.find_first_of("="); std::string key = buf.substr(0, idx); std::string value = buf.substr(idx + 1); env[key] = value; } return env; }
std::string proc_cmdline(const proc_t* proc_info) { std::string attr; std::string result; attr = proc_attr("cmdline", proc_info); std::ifstream fd(attr, std::ios::in | std::ios::binary); if (fd) { result = std::string(std::istreambuf_iterator<char>(fd), std::istreambuf_iterator<char>()); std::replace_if( result.begin(), result.end(), [](const char& c) { return c == 0; }, ' '); } return result; }
std::string proc_link(const proc_t* proc_info) { std::string attr; std::string result; char* link_path; long path_max; int bytes; // The exe is a symlink to the binary on-disk. attr = proc_attr("exe", proc_info); path_max = pathconf(attr.c_str(), _PC_PATH_MAX); link_path = (char*)malloc(path_max); memset(link_path, 0, path_max); bytes = readlink(attr.c_str(), link_path, path_max); if (bytes >= 0) { result = std::string(link_path); } free(link_path); return result; }