打印二进制文件的名称

时间:2018-09-18 11:01:07

标签: c

很抱歉,如果这是一个愚蠢的问题,但我一直在搜索,但无法在其他任何地方找到答案。它最有可能很简单,但这里有:

我被要求编写一个带有一个参数的C程序。如果我尝试给它一个以上,它应该以{{1​​}}的格式将用法消息打印到stderr,其中Usage: %s argument\n是二进制文件的名称。

这是我不明白的最后一部分。

我知道如果失败,它应该看起来像这样:

%s 用法:$./hello

有人可以向我解释一下吗?

编辑:

让它像这样工作:

./hello argument

1 个答案:

答案 0 :(得分:0)

首先,您可以尝试对其进行硬编码:)开个玩笑。

如果您使用的是Linux,则可以使用/ proc / pid / exe获得二进制名称。

例如:

auto ret = readlink("/proc/self/exe", buf, sizeof(buf));
if (ret == -1) //error
std::string fpath(buf, ret);

现在在fpath中,您具有程序的绝对路径。您可以使用dirname之类的函数来解析程序。

因此,首先您需要获取char *的绝对路径。这可以通过strcpy

完成
char *fullpath = new char[fpath.length()+1];
strcpy(fullpath, fpath.c_str());
std::string dir = dirname(fullpath);
std::string program_name = fpath.substr(dir.length());

printf("Usage: %s argument\n", program_name);

就是这样。我将留给您决定缓冲区的大小;)

如果在Windows上,则可以使用函数GetModuleFileName https://msdn.microsoft.com/en-us/library/windows/desktop/ms683197(v=vs.85).aspx

享受