如何在c++中将pid转换为const字符指针

How to convert pid to const char pointer in c++?

本文关键字:const 字符 指针 转换 pid c++ 中将      更新时间:2023-10-16

我正在尝试将pid类型转换为const char指针,以便可以将它们作为execlp函数中的参数传入。

例如。execlp("/bin/ps", "-f", "--ppid", "9340,9345,9346,9342");

我知道你可以把pid转换成字符串,例如const std::string my_pid(str_pid.str());

和指向常量字符指针的字符串,例如my_pid.c_str();

但是,如何将多个pid连接到一个const char指针中,以便我可以使用它们运行execlp命令呢?

ostringstream可能就是您想要的。

例如,

std::ostringstream ostr;
for (int i=0; i<pids.count(); i++)
{
    if (i > 0) ostr << ',';
    ostr << pids[i];
}
execlp("/bin/ps", "-f", "--ppid", ostr.str().c_str());

您可以将所有值连接到一个单独的std::string中,然后将最终的std::string值传递给execlp(),例如:

std::string pids;
for (however many pids you have)
{
    if (!pids.empty())
        pids += ",";
    pids += std::string(str_pid.str());
}
execlp("/bin/ps", "-f", "--ppid", pids.c_str());

字符串流是一种很好的C++方法。

std::stringstream myStream;
myStream << "a c string" << aStringObject << std::endl; // operate on the stream
std::string myNewString = myStream.str(); // create a string object

将数据视为流是一种相当通用的方法,可以使您序列化和反序列化自定义或内置类型。自定义类型可以包括operator<<operator>>,以分别允许插入和提取。

与使用临时字符串对象和操作它们相比,这种方法还应该具有速度优势。托管流(或其任何基类(将在盖子下使用缓冲区。带有临时字符串的循环在每次迭代中将调用更多的构造函数/分配/析构函数。这也取决于底层的字符串表示。写时复制(COW(字符串实现将具有较少的分配,并且可能只更新引用,但是更新工作字符串仍然需要新的字符串。