Seç*_*şçı 21
argv[0] 您的主要功能是您的文件名.
一个简单的代码片段:
#include<stdio.h>
int main(int argc,char** argv)
{
//access argv[0] here
}
Run Code Online (Sandbox Code Playgroud)
mar*_*inj 10
在Windows上,您可以使用:
TCHAR szExeFileName[MAX_PATH];
GetModuleFileName(NULL, szExeFileName, MAX_PATH);
Run Code Online (Sandbox Code Playgroud)
szExeFileName将包含完整路径+可执行文件名称
[编辑]
用于更便携的解决方案使用argv[0]或一些其他平台特定代码.你可以在这里找到这样的方法:https://github.com/mirror/boost/blob/master/libs/log/src/process_name.cpp.
在Linux上,二进制文件的文件名是符号链接的目标/proc/self/exe.您可以使用readlink系统调用来查找符号链接的目标.
请注意,这会告诉您存储二进制文件的磁盘上的实际位置,而不仅仅是用户用来启动程序的命令.
这是使用 boost 的跨平台方式(https://www.boost.org/)
#include <iostream>
#include <boost/dll.hpp>
int main( int argc, char **argv ) {
std::cout << "hello world, this is [" << boost::dll::program_location().filename().string() << "]" << std::endl;
std::cout << "or [" << boost::dll::program_location().string() << "] if you're not into the whole brevity thing." << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译通过
g++ -o hello_world hello_world.cpp -lboost_filesystem -lboost_system -ldl
Run Code Online (Sandbox Code Playgroud)
结果输出
hello world, this is [hello_world]
or [/home/gjvc/tmp/hello_world] if you're not into the whole brevity thing.
Run Code Online (Sandbox Code Playgroud)