【问题标题】:C++ What is my own file name?C++ 我自己的文件名是什么?
【发布时间】:2012-07-14 05:19:35
【问题描述】:

我有一段调用系统命令的 C++ 代码。我想将我自己的 C++ 可执行文件的文件名传递给系统命令。有人知道该怎么做吗? 因此,例如我的 C++ 代码被称为“switch-5”.. 我想做的是这样的;

system("./script.sh switch-5");

有人知道吗?

【问题讨论】:

    标签: c++ variables system


    【解决方案1】:

    您的可执行文件名称是传入 argv 的第一个参数。

    要测试这个,只需运行:

    int main(int argc, char **argv)
    {
       printf("My program name: '%s'\n", argv[0]);
       return 0;
    }
    

    (我假设您知道如何将它与您的脚本名称结合起来以获取要传递给 system() 的字符串。)

    【讨论】:

    • 如果您已将可执行文件放在路径上,因此无需真正的路径说明符即可调用它,则只有您用来调用它的基本名称将在 argv[0] 中。因此,如果您想做一些事情,例如查找与可执行文件相关的文件,您必须找到不同的方法。
    【解决方案2】:

    argv[0] 传递给 main 是您的可执行文件的名称。

    【讨论】:

    • 虽然argv[0] 往往是可执行文件的名称,但我的理解是这是一个约定,不能保证......
    • @rueben:你可能是对的。但我相信如果不是,那是因为程序修改了它。 IIRC SAMBA 中的一些程序这样做是为了避免泄漏 /proc 中的密码和 ps 的输出。
    • 这里有更多关于完整故事的背景:stackoverflow.com/questions/383973/…
    【解决方案3】:

    在应用启动期间将其存储在全局变量中:

    static char *selfname;
    
    int main(int argc, char **argv)
    {
        selfname = argv[0];
    
        // etc.
    }
    

    【讨论】:

      【解决方案4】:

      请注意,argv[0] 包含用于启动程序的确切内容,包括相对或绝对路径,例如:“./programname”。

      【讨论】:

        猜你喜欢
        • 2013-08-05
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多