【问题标题】:how to get running executable name in c/c++ for gcc compiler [duplicate]如何在 c/c++ 中为 gcc 编译器获取运行的可执行文件名称 [重复]
【发布时间】:2015-08-17 15:01:17
【问题描述】:

我的目的是在每个平台(Windows、Mac Os x、Linux)中使用相同的代码获取正在运行的可执行文件的名称。

每个平台都有单独的代码来查找可执行文件的名称。

在 Windows 中有 GetModuleFileName() 函数来获取可执行文件的名称,但它适用于 Visual Studio。

我也用argv[0]来获取当前可执行文件的路径。

我正在使用gcc 编译器,我需要生成适用于所有平台(Windows、Mac Os x、Linux)的代码来获取正在运行的可执行文件的名称。

【问题讨论】:

  • 什么是arg[0]?不过,我听说过argv[0] 。 (开个玩笑):P
  • 好吧,您知道argv[0] 会为您提供信息,而且确实如此。有什么问题?
  • 我想要运行中的可执行文件名,它适用于所有平台
  • @AnandSukumar argv 是标准的,适用于所有平台。
  • 可执行文件的路径名只能通过不同系统上的(不同)迂回方式找到。它不一定在argv[0] 中。我相信它总是可行的。我也可以肯定在 SO 的某个地方还有关于该主题的另一个问题——我找到了它(收藏夹有它们的用途);我已将其作为副本关闭。

标签: c++ c gcc


【解决方案1】:

引用C11 标准,第 5.1.2.2.1 章,

如果argc的值大于零,则argv[0]指向的字符串 代表程序名称; argv[0][0] 应为空字符,如果 程序名称在主机环境中不可用。[...]

因此,在对argv[0] 进行空检查后,您可以使用与程序名称相同的名称。

是的,它独立于平台。

【讨论】:

  • 请注意execlp("sleep", "anonymous", "20", (char *)0); 告诉sleep 它被称为anonymous
  • 这并不总是正确的。例如,像 bash 这样的登录 shell 会将 -bash 作为 argv[0] 而不是 /usr/bin/bash
  • argv[0] 不一定是可执行文件的实际名称。它可能是指向可执行文件的链接的名称,也可能是用户设置的别名
  • 从可执行文件的路径,我们可以拆分可执行文件名。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2012-02-11
  • 2018-10-13
  • 2011-11-20
  • 2014-05-31
  • 2019-11-15
相关资源
最近更新 更多