主要启动前访问命令行

时间:2013-06-15 01:13:06

标签: c++ linux initialization main argv

有没有办法在启动argv之前从静态初始值设定项中访问main()

class FooInitializer {
  public:
    FooInitializer() {
      // do something funny depending on argv
    }
};

FooInitializer initializer;


main(int argc, char** argv) {
}

我会对特定于Linux的解决方案感到满意。

1 个答案:

答案 0 :(得分:3)

您可以从proc/self/cmdline文件中检索传递给Linux中的应用程序的命令行参数。这包含完整的命令行,每个参数用空字节(0值)分隔。最后一个参数后跟一个额外的空字节。下面的示例显示了如何从proc/self/cmdline读取参数并将它们输出到控制台。

#include <iostream>
#include <fstream>
#include <string>
#include <utility>

void printargs()
{
    std::ifstream cmdline("/proc/self/cmdline", std::ifstream::binary);
    if(cmdline.is_open())
    {
        for(std::string arg; std::getline(cmdline, arg); )
        {
            std::cout << "arg:" << arg << std::endl;
        }
    }
}

int main()
{
    printargs();
}