4 * Created on: 2014. 6. 10.
15 #include <arpa/inet.h>
16 #include <sys/socket.h>
25 //----------------------------------------------------------------------
27 std::string Util::ultostr(int64_t data)
33 //----------------------------------------------------------------------
35 int Util::strtollu(std::string data)
48 //----------------------------------------------------------------------
50 std::string Util::trim(std::string& s, const std::string& drop)
52 std::string r = s.erase(s.find_last_not_of(drop) + 1);
53 return r.erase(0, r.find_first_not_of(drop));
55 //----------------------------------------------------------------------
57 int Util::split(std::string data, const char delimiter, std::vector<string>& tokens)
59 std::stringstream data_stream(data);
60 for(std::string token; std::getline(data_stream, token, delimiter); tokens.push_back(trim(token)));
63 //----------------------------------------------------------------------
65 bool Util::split_key_value(std::string data, std::string delimiter, std::string &key, std::string &value)
67 int idx = data.find(delimiter);
68 if (idx == string::npos) {
69 WARNING("split key & value (data : %s, delimiter : %s)", data.c_str(), delimiter.c_str());
72 key = data.substr(0, idx);
73 value = data.substr(idx+1, data.length()-idx);
76 //----------------------------------------------------------------------
78 void Util::vlog(const char * format, ...) throw()
80 static char vlog_buffer[MAX_PRINT_LEN];
81 memset(vlog_buffer, 0, MAX_PRINT_LEN);
84 va_start(args, format);
85 vsnprintf(vlog_buffer, MAX_PRINT_LEN-1, format, args);
88 WARNING("%s", vlog_buffer);
90 //----------------------------------------------------------------------
92 std::string Util::host_addr()
95 struct sockaddr_in addr;
96 socklen_t addrlen = sizeof(addr);
98 getpeername(0, (struct sockaddr*)&addr, &addrlen);
99 ss << inet_ntoa(addr.sin_addr);
103 //-------------------------------------------------------------------------------
105 std::vector<int> Util::find_process_by_name(std::string name, int mypid)
107 std::vector<int> pidlist;
108 char cmdlinepath[256] = {0};
109 DIR* d = opendir("/proc");
112 while ((de = readdir(d)) != 0) {
113 int pid = atoi(de->d_name);
115 sprintf(cmdlinepath, "/proc/%s/cmdline", de->d_name);
118 std::ifstream cmdlinefile(cmdlinepath);
119 std::getline(cmdlinefile, cmdline);
120 if (!cmdline.empty()) {
121 size_t pos = cmdline.find('\0');
122 if (pos != string::npos)
123 cmdline = cmdline.substr(0, pos);
124 pos = cmdline.rfind('/');
125 if (pos != string::npos)
126 cmdline = cmdline.substr(pos + 1);
127 if ((name == cmdline) && ((mypid != pid) || (mypid == 0))) {
128 pidlist.push_back(pid);
137 //-------------------------------------------------------------------------------
139 void Util::kill_process(int pid)
141 int result = kill(pid, SIGINT);
142 DEBUG("SEND SIGINT to %d, result : %d", pid, result);
145 //----------------------------------------------------------------------