获取进程的 argc 和 argv 的替代方法

新手上路,请多包涵

我正在寻找替代方法来获取命令行参数 argcargv 提供给进程,而无需直接访问传递给 main() 的变量。

我想创建一个独立于 main() 的类,以便 argcargv 不必显式传递给使用它们的代码。

编辑:一些澄清似乎是有序的。我有这堂课。

 class Application
{
  int const argc_;
  char const** const argv_;

public:
  explicit Application(int, char const*[]);
};

Application::Application(int const argc, char const* argv[]) :
  argc_(argc),
  argv_(argv)
{
}

但我想要一个默认构造函数 Application::Application() ,带有一些(很可能)C代码,从某个地方拉出 argcargv

原文由 user1095108 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 750
1 个回答

在 Linux 上,您可以从进程的 proc 文件系统中获取此信息,即 /proc/$$/cmdline

 int pid = getpid();
char fname[PATH_MAX];
char cmdline[ARG_MAX];
snprintf(fname, sizeof fname, "/proc/%d/cmdline", pid);
FILE *fp = fopen(fname);
fgets(cmdline, sizeof cmdline, fp);
// the arguments are in cmdline

原文由 fluter 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题