refact: Process::readFile

Remove DString::splitVectorChars. Use std::getline and fstream.
This commit is contained in:
black-desk
2023-05-10 13:34:07 +08:00
committed by Tsic
parent 222194eb95
commit fd6622c30c
3 changed files with 10 additions and 31 deletions

View File

@ -49,28 +49,6 @@ std::vector<std::string> DString::splitStr(const std::string &str, char c)
return splitChars(str.c_str(), c); return splitChars(str.c_str(), c);
} }
std::vector<std::string> DString::splitVectorChars(const std::vector<char> &content, size_t length, char c)
{
std::vector<std::string> ret;
size_t pos = 0;
bool hasChar = true;
for (size_t i = 0; i < length; i++) {
if (content[i] == c && i > pos && hasChar) {
std::string str;
for (size_t j = pos; j <= i; j++) {
str += std::string(1, content[j]);
}
ret.push_back(str);
pos = i + 1;
hasChar = false;
} else {
hasChar = true;
}
}
return ret;
}
bool DString::startWith(const char *chars, const char *prefix) bool DString::startWith(const char *chars, const char *prefix)
{ {
if (!chars || !prefix) { if (!chars || !prefix) {

View File

@ -24,7 +24,6 @@ public:
// 字符串拆分 // 字符串拆分
static std::vector<std::string> splitChars(const char *cs, char c); static std::vector<std::string> splitChars(const char *cs, char c);
static std::vector<std::string> splitStr(const std::string &str, char c); static std::vector<std::string> splitStr(const std::string &str, char c);
static std::vector<std::string> splitVectorChars(const std::vector<char> &content, size_t length, char c);
// 字符串前缀判断 // 字符串前缀判断
static bool startWith(const char *chars, const char *prefix); static bool startWith(const char *chars, const char *prefix);
static bool startWith(const std::string &str, const std::string &prefix); static bool startWith(const std::string &str, const std::string &prefix);

View File

@ -8,6 +8,7 @@
#include "dfile.h" #include "dfile.h"
#include <algorithm> #include <algorithm>
#include <fstream>
#include <dirent.h> #include <dirent.h>
#include <unistd.h> #include <unistd.h>
@ -154,18 +155,19 @@ std::string Process::getFile(const std::string &name)
return "/proc/" + std::to_string(m_pid) + "/" + name; return "/proc/" + std::to_string(m_pid) + "/" + name;
} }
// /proc is not real file system // This funciton only can used to read `environ` and `cmdline`
std::vector<std::string> Process::readFile(std::string fileName) std::vector<std::string> Process::readFile(std::string fileName)
{ {
std::vector<std::string> ret; std::vector<std::string> ret;
std::FILE *fp = std::fopen(fileName.c_str(), "r"); std::ifstream fs(fileName);
if (!fp) if (!fs.is_open()) {
return ret; return ret;
}
std::vector<char> content(FILECONTENLEN);
std::size_t len = std::fread(&content[0], 1, FILECONTENLEN, fp); std::string tmp;
std::fclose(fp); while (std::getline(fs, tmp, '\0')) {
ret.push_back(tmp);
ret = DString::splitVectorChars(content, len, '\0'); }
return ret; return ret;
} }