c++ - 在 main 启动之前访问命令行

标签 c++ linux initialization program-entry-point argv

有没有办法在 main() 启动之前从静态初始化程序访问 argv

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

FooInitializer initializer;


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

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

最佳答案

您可以从 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();
}

关于c++ - 在 main 启动之前访问命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17119311/

相关文章:

c++ - 在初始化期间使用 *this 将对象的实例传递给成员

c - C中的可变长度数组并就地初始化

c++ - 聚合对象预期使用 '{...}' 进行初始化

java - 我应该如何订购 if 语句?

regex - 修剪目录中所有文件的一部分文件扩展名 - Linux

asp.net - 安装(和部署)Mono ASP.Net 到 Redhat

linux - 如何将 Yocto 生成的 U-boot 二进制文件加载到 t1042d4rdb 板

c++ - 无法将 Lua 编译为 C++

c++ - 64位的vc++程序似乎在32位模式下运行

c++ - 为什么不能像这样传递参数?